为什么我的秒表会在1秒后保持重置状态

时间:2011-08-30 13:56:10

标签: c# stopwatch

所以我有以下代码块:

var sw = new Stopwatch();
sw.Start();
while (sw.Elapsed.Seconds<10)
{
    System.Threading.Thread.Sleep(50);
    Console.WriteLine(sw.Elapsed.Milliseconds.ToString() + " ms");
}
sw.Stop();

在输出中我有

50 ms
101 ms
151 ms
202 ms
253 ms
304 ms
355 ms
405 ms
456 ms
507 ms
558 ms
608 ms
659 ms
710 ms
761 ms
812 ms
862 ms
913 ms
964 ms
15 ms
65 ms
116 ms
167 ms
218 ms

为什么每1000毫秒重置一次?我需要等待10秒,我不能使用Thread.Sleep(10000);,因为我使用的第三方库也会睡觉,我需要它来做那段时间的事情。

3 个答案:

答案 0 :(得分:13)

因为Stopwatch.Elapsed.Milliseconds只输出经过时间的毫秒分量。 总时间(以毫秒为单位)。这从文档中可以清楚地看出。 Stopwatch.ElapsedTimeSpanTimeSpan.Milliseconds个状态的实例:

  

获取当前TimeSpan结构所代表的时间间隔的毫秒组件。

如果您希望输出以毫秒为单位,并且您想要总毫秒数,那么请使用TimeSpan.TotalMilliseconds

  

获取以整数和小数毫秒表示的当前TimeSpan结构的值。

始终,始终,始终检查文档!

答案 1 :(得分:6)

您需要sw.Elapsed的{​​{3}}属性,而不是sw.Elapsed.Milliseconds

答案 2 :(得分:1)

您不一定需要使用TimeSpan属性返回的Elapsed

StopWatch直接公开ElapsedMilliseconds属性,返回以long为单位的总毫秒数。通过Elapsed属性获取TotalMilliseconds将产生一倍。使用对您最有意义的值。