正在循环中评估DateTime.Now.Millisecond-C#

本文关键字:DateTime Now Millisecond-C# 评估 循环 | 更新日期: 2023-09-27 18:24:37

我是编程新手。我试图使用System.Timer来评估以毫秒为单位的时间,以在current timepast time + a number of milliseconds匹配时(满足未来条件)突破while循环。

有时它会成功地退出循环,但有时它会以无限循环的形式运行。我认为这与毫秒时钟的精度有关,但我不确定。变量的控制台输出显示timeFuture是正确的。

我看过Timespan,但不知道如何使用它。非常感谢您的反馈。

long end = 500;  //500 milliseconds
long timeStart = DateTime.Now.Millisecond;  //time in milliseconds
long timeFuture = timeStart + end;
long timeNow = 0;
while (true)
{
    timeNow = DateTime.Now.Millisecond;              
    if (timeFuture - timeNow == 0) { break; }             
    Console.WriteLine(timeNow);
}

正在循环中评估DateTime.Now.Millisecond-C#

DateTime.Now.Milisecond不返回以毫秒为单位的时间,而是返回DateTime实例所代表的时间点的实际毫秒(因此它将始终在0和999之间)。此外,当您在多线程系统上运行时,您的条件可能永远不会在其求值为true的确切时间点执行(写入控制台也会消耗时间)。

因此,您可以考虑更改您的条件,并使用Timespan类:

DateTime timeStart = DateTime.Now;
while (true)
{
  DateTime timeNow = DateTime.Now;
  TimeSpan difference = (timeNow - timeStart);
  if (difference.TotalMilliseconds >= 500) { break; }
  Console.WriteLine(timeNow);
}

毫秒是时间的组成部分,而不是时间跨度。你想要类似的东西

    DateTime start = DateTime.Now;
    while (true)
    {
        if ((DateTime.Now - start ).TotalMilliseconds>500) // Is a timespan
          { break; }             
        Console.WriteLine(timeNow);
    }