5

所以我有以下代码块:

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 方库也在休眠,我需要它在那段时间做一些事情。

4

3 回答 3

12

因为Stopwatch.Elapsed.Milliseconds只输出经过时间的毫秒部分。它不是以毫秒为单位的总时间。从文档中可以清楚地看到这一点。Stopwatch.ElapsedTimeSpanTimeSpan.Milliseconds状态的一个实例:

获取当前TimeSpan结构表示的时间间隔的毫秒分量。

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

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

总是,总是,总是检查文档!

于 2011-08-30T13:58:29.190 回答
6

你需要TotalMilliseconds,sw.Elapsed而不是sw.Elapsed.Milliseconds

于 2011-08-30T13:59:43.533 回答
1

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

StopWatch直接公开一个ElapsedMilliseconds属性,该属性将总毫秒数作为long. 通过该Elapsed属性获取TotalMilliseconds将产生双倍。使用对您最有意义的值。

于 2011-08-30T14:10:48.533 回答