Ottenere un tick di cambio orologio di sistema in C #
Domanda
È un modo per eseguire un delegato
o evento
in C # quando i secondi, i minuti, le ore ... cambiano nell'orologio di sistema, senza usare un timer che controlla ogni millisecondo se la proprietà è cambiata ed esegue l'evento con un ritardo massimo di un millisecondo.
Voglio quindi evitare polling e lanciare un evento in un determinato momento.
Soluzione
Se la tua domanda è: " Come eseguo un delegato ogni secondo / minuto / ora completo? "
Per intervalli di minuti e ore, potresti fare qualcosa come mostrato nella mia risposta in questa domanda SO:
Questo dovrebbe essere abbastanza accurato, ma non sarà esatto al millisecondo.
Per i secondi intervalli, andrei con un timer con un semplice intervallo di 1 secondo. Dal punto di vista dell'utente penso che non ci sia molta differenza se l'azione viene eseguita su xx: xx: xx.000 o su xx: xx: xx.350.
Altri suggerimenti
Puoi iscriverti a SystemEvents.TimeChanged . Questo si attiva quando l'orologio di sistema viene modificato.
L'ho risolto in un'app di moduli impostando l'intervallo su (1000 - DateTime.Now.Millisecond)
_timer1 = new System.Windows.Forms.Timer();
_timer1.Interval = (1000 - DateTime.Now.Millisecond);
_timer1.Enabled = true;
_timer1.Tick += new EventHandler(updateDisplayedTime);
e nel gestore dell'evento reimpostare l'intervallo per impedire la deriva.
<handle event>
_timer1.Interval = (1000 - DateTime.Now.Millisecond);