2011-08-30 8 views
5

Así Tengo el siguiente bloque de código:¿Por qué no mantener mi cronómetro reseting después de 1 segundo

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

y en la salida tengo

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 

¿Por qué se restablece cada 1000 ms? Necesito esperar 10 segundos y no puedo usar Thread.Sleep(10000); porque esta biblioteca de terceros que uso duerme también y necesito que haga cosas durante ese tiempo.

Respuesta

13

Debido Stopwatch.Elapsed.Milliseconds simplemente da salida el componente de milisegundos del tiempo transcurrido. Es no el tiempo total en milisegundos. Esto está claro en la documentación. Stopwatch.Elapsed es una instancia de TimeSpan y TimeSpan.Milliseconds estados:

Obtiene el componente milisegundos del intervalo de tiempo representado por la TimeSpan estructura actual.

Si desea que la salida en milisegundos, y desea que los milisegundos en total, a continuación, utilizar TimeSpan.TotalMilliseconds:

Obtiene el valor de la TimeSpan estructura actual expresado en milisegundos entera y fraccionaria.

siempre, siempre, SIEMPRE verifique la documentación!

+2

+1 para consultar siempre la documentación. – Polyfun

1

No necesariamente tienen que utilizar el TimeSpan devuelto por la propiedad Elapsed.

StopWatch expone un ElapsedMilliseconds propiedad directamente que devuelve el número total de milisegundos como un long. Pasar por la propiedad Elapsed para obtener TotalMilliseconds arrojará un doble. Use el valor que tenga más sentido para usted.

Cuestiones relacionadas