2015-07-08 21 views
8

Perdonami per questa domanda, ma non riesco a trovare una buona fonte di quando usare quale. Sarei felice se tu possa spiegarlo in termini semplici.StopWatch vs Timer - Quando utilizzare

Inoltre, sto affrontando questo dilemma:

Vedete, io sono codifica una semplice applicazione. Voglio che mostri il tempo trascorso (hh: mm: formato ss o qualcosa del genere). Ma anche, per essere in grado di "accelerare" o "rallentare" i suoi intervalli di tempo (cioè accelerare in modo che un minuto in tempo reale sia uguale a un'ora nell'app).

Ad esempio, nei video di YouTube (* non consideriamo il fatto che possiamo passare a parti specifiche del video *), vediamo il tempo trascorso a guardare quel video nell'angolo in basso a sinistra dello schermo , ma attraverso la navigazione nel menu delle opzioni, siamo in grado di velocizzare il video verso l'alto o verso il basso.

Youtube (2015) video player control bar

E in realtà possiamo vedere che il tempo viene aggiornato in un modo che è d'accordo con il fattore di velocità (come, se si sceglie il doppio della velocità, il timer in basso viene aggiornato due volte più velocemente del normale), e puoi cambiare questa velocità ogni volta che vuoi.

enter image description here

Questo è ciò che sono un po 'dopo. Qualcosa di simile a come i video di YouTube misurano il tempo trascorso e il fatto che possono cambiare gli intervalli di tempo. Quindi, quale dei due pensi che dovrei scegliere? Timer o StopWatch?

Sto solo codificando un'applicazione Windows Form, a proposito. Sto simulando qualcosa e voglio che l'utente sia in grado di accelerare ogni volta che lo desidera. Per quanto semplice possa essere, desidero attuare un approccio adeguato.

+0

possibile duplicato di [Come potrei fare per implementare un cronometro con velocità diverse?] (Http://stackoverflow.com/questions/2857210/how-would-i-go-about-implementing-a-stopwatch-with -differenti-velocità) –

+3

Un timer è inutile per misurare il tempo trascorso, è sufficiente solo per aggiornare l'etichetta. Usa Environment.TickCount, DateTime.UtcNow o Cronometro. I primi due sono molto accurati per lunghi periodi, il secondo è buono per brevi periodi. –

+0

@HansPassant: +1, utilizzo sempre StopWatch a causa esattamente dei punti che si mettono in evidenza. – code4life

risposta

8

Per quanto ne so le differenze principali sono:

Timer

  1. Timer è solo un programmatore semplice che gestisce alcune operazioni/metodo per voi una volta ogni tanto.
  2. Esegue il metodo in un thread separato. Questo impedisce il blocco del thread principale.

cronometro

  1. Cronometro da percorsi predefiniti nello stesso thread.
  2. Può contare il tempo e restituisce la struttura TimeSpan che potrebbe essere utile nel caso in cui siano necessarie informazioni aggiuntive.

Il timer è buono se è necessario eseguire alcune attività in intervalli di tempo. Il cronometro è buono se hai bisogno di guardare il tempo e maggiori informazioni su quanto tick di processore trascorsi richiede il tuo metodo e questo genere di cose.

+0

Voto positivo: il contesto del thread è piuttosto significativo. – code4life

2

Questo è già stato trattato in una serie di altre domande, tra cui here. Fondamentalmente, puoi avere il cronometro con un fattore di velocità, quindi il risultato è il tuo "tempo trascorso". Un approccio più complicato è l'implementazione del timer and changing the Interval property.

+0

Non l'ho visto. Colpa mia. E grazie. –

+1

Se è stato chiesto e risposto molte volte, non si dovrebbe rispondere e attendere che altri lo chiudano ... –

+0

Ho aggiunto un voto stretto, a proposito, dovresti sapere che la tua "risposta" dovrebbe essere un commento. .. –

Problemi correlati