正在循环中评估DateTime.Now.Millisecond-C#
本文关键字:DateTime Now Millisecond-C# 评估 循环 | 更新日期: 2023-09-27 18:24:37
我是编程新手。我试图使用System.Timer
来评估以毫秒为单位的时间,以在current time
与past 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.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);
}