所以我有以下代码块:
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);
,因为我使用的第三方库也会睡觉,我需要它来做那段时间的事情。
答案 0 :(得分:13)
因为Stopwatch.Elapsed.Milliseconds
只输出经过时间的毫秒分量。 不总时间(以毫秒为单位)。这从文档中可以清楚地看出。 Stopwatch.Elapsed
是TimeSpan
和TimeSpan.Milliseconds
个状态的实例:
获取当前
TimeSpan
结构所代表的时间间隔的毫秒组件。
如果您希望输出以毫秒为单位,并且您想要总毫秒数,那么请使用TimeSpan.TotalMilliseconds
:
获取以整数和小数毫秒表示的当前
TimeSpan
结构的值。
始终,始终,始终检查文档!
答案 1 :(得分:6)
您需要sw.Elapsed
的{{3}}属性,而不是sw.Elapsed.Milliseconds
答案 2 :(得分:1)
您不一定需要使用TimeSpan
属性返回的Elapsed
。
StopWatch
直接公开ElapsedMilliseconds
属性,返回以long
为单位的总毫秒数。通过Elapsed
属性获取TotalMilliseconds
将产生一倍。使用对您最有意义的值。