2011-08-30 25 views
5

Więc mam następujący blok kodu:Dlaczego mój stoper zachować resetowanie po 1 sekundzie

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(); 

i na wyjściu mam

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 

Dlaczego zresetować co 1000 ms? Muszę poczekać 10 sekund i nie mogę użyć Thread.Sleep(10000);, ponieważ ta trzecia biblioteka, której używam, również śpi i potrzebuję jej do robienia rzeczy w tym czasie.

Odpowiedz

13

Ponieważ Stopwatch.Elapsed.Milliseconds po prostu wysyła składnik milisekundy upływu czasu. Jest to , a nie całkowity czas w milisekundach. Wynika to jasno z dokumentacji. Stopwatch.Elapsed jest wystąpienie TimeSpan i TimeSpan.Milliseconds stanów:

Pobiera składnik milisekund interwału czasu reprezentowanego przez bieżący TimeSpan struktury.

Jeśli chcesz wyjście w milisekundach, a chcesz łączne milisekund, a następnie użyć TimeSpan.TotalMilliseconds:

Pobiera wartość bieżącego TimeSpan strukturze wyrażonej w całości i milisekund ułamkowych.

zawsze, Zawsze ZAWSZE sprawdzaj dokumentację!

+2

+1 za zawsze sprawdzanie dokumentacji. – Polyfun

1

Nie koniecznie trzeba użyć TimeSpan zwracany przez właściwość Elapsed.

StopWatch udostępnia bezpośrednio właściwość ElapsedMilliseconds, która zwraca łączną liczbę milisekund jako long. Przejście przez właściwość Elapsed, aby uzyskać TotalMilliseconds, spowoduje podwójne wyświetlenie. Użyj wartości, która ma dla ciebie największy sens.