可以';t在C#中的匹配次数

本文关键字:可以 | 更新日期: 2023-09-27 17:57:33

我有一个用C#编写的非常简单的程序,但循环永远不会退出,因为时间不匹配。

static void Main(string[] args)
{
    while (System.DateTime.Now != new System.DateTime(2011, 05, 23, 22, 17, 0))
    {
    }
    System.Diagnostics.Process.Start(file);   
}

其想法是,当时间计时到指定的时间时,给定的文件就会启动。然而,我已经用一些值测试了这个程序,例如,只比Windows报告的当前时间提前了一分钟,它不会启动这个过程。我已验证Process.Start调用是否正确。有什么建议吗?

编辑:不,这不是一个实验或任何类似的东西。这是因为我在睡觉时一直关掉闹钟。file是一个mp3文件,我要把扬声器开着,我很确定我在睡觉时没有能力处理它。我用程序解决的第一个实际问题。由于它有一个相当具体的目的,我想你会同意另一个解决方案的必要性是有限的。

编辑:我没有意识到DateTime类型会下降到那种精度,否则我自己就会发现这一点。我认为它们只在一秒钟内有效,而且由于循环即使在IDE中的调试模式下也应该每秒运行很多次,我不明白为什么完全匹配是不合理的。但是,当然,如果你把它比作100纳秒,这是非常不可能的。

可以';t在C#中的匹配次数

您应该执行

static void Main(string[] args)
{
    while (System.DateTime.Now < new System.DateTime(2011, 05, 23, 22, 17, 0))
    {
    }
    System.Diagnostics.Process.Start(file);   
}

因为如果你不勾选确切的时间,它就永远不会退出

编辑原因的详细解释!=很可能不会起作用所以实际上你可以这样写代码:

static void Main(string[] args)
{
    DateTime fireDate = new DateTime(2011, 05, 23, 22, 17, 0);
    while (System.DateTime.Now < fireDate)
    {
    }
    System.Diagnostics.Process.Start(file);   
}

正如Ben Voigt所指出的,DateTime比较着眼于DateTime DateTime上的Ticks属性。是毫秒的1/10,000

您的循环可能不会那么频繁地执行。

为什么不使用睡眠或创建计时器?

使用<而不是!=

无论如何,这是一种可怕的等待特定时间的方式。

这是愚人节的笑话吗?

使用<而不是!=

我会将其切换为

while (System.DateTime.Now < new System.DateTime(2011, 05, 23, 22, 17, 0))
{
}

相反。尽管我也会非常谨慎地使用这样的闭环,并认为设置一个预定的任务或其他事情会更有效。

将其更改为用户小于运算符我有点惊讶它以秒为单位错过了时间,b但使用时间相等通常是危险的,因为这是非常精确的原因(基于Ticks的相等)。

System.DateTime.Now < otherDateTime

需要注意的是,这种类型的"繁忙等待"对处理器来说是极其浪费的。正如其他人所指出的,使用计时器,或者至少让线程休眠,这样处理器就可以用它的时间做其他事情。