2011-08-30 13 views
5

Così ho il seguente blocco di codice:Perché il mio cronometro tenere resettare dopo 1 secondo

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

e in uscita ho

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 

Perché è azzerato ogni 1000 ms? Ho bisogno di aspettare 10 secondi e non posso usare Thread.Sleep(10000); perché questa libreria di terze parti uso sleeps anche e ho bisogno che faccia cose durante quel periodo.

risposta

13

Perché il Stopwatch.Elapsed.Milliseconds emette solo il componente in millisecondi del tempo trascorso. È non il tempo totale in millisecondi. Questo è chiaro dalla documentazione. Stopwatch.Elapsed è un'istanza di TimeSpan e TimeSpan.Milliseconds paese:

Ottiene il componente millisecondi dell'intervallo di tempo rappresentato dalla corrente TimeSpan struttura.

Se si desidera che l'uscita in millisecondi, e si desidera che i millisecondi totali, quindi utilizzare TimeSpan.TotalMilliseconds:

Ottiene il valore della corrente TimeSpan espresso struttura per intero, millisecondi frazionari.

sempre, Sempre, controllare SEMPRE la documentazione!

+2

+1 per controllare sempre la documentazione. – Polyfun

1

Non è necessariamente bisogno di usare il TimeSpan restituito dalla proprietà Elapsed.

StopWatch espone direttamente una proprietà ElapsedMilliseconds che restituisce il numero totale di millisecondi come long. Passare attraverso la proprietà Elapsed per ottenere TotalMilliseconds produrrà un doppio. Usa il valore che ha più senso per te.

Problemi correlati