Ottenere un sistema-clock-change-tick in C #

È un modo per eseguire un delegate o un event in C # quando i secondi, i minuti, le ore, … cambiano nel clock di sistema, senza usare un timer che controlla ogni millisecondo se la proprietà è cambiata ed esegue l’evento con un ritardo di massimo un millisecondo.

Voglio quindi evitare di sondare e licenziare un evento in un dato momento.

Se la tua domanda è: “Come eseguo un delegato ogni secondo / minuto / ora completo?”

Per intervalli di minuti e ore, si potrebbe fare qualcosa come mostrato nella mia risposta in questa domanda SO:

  • Come generare un evento in un momento specifico dell’orologio in C #?

Questo dovrebbe essere abbastanza preciso, 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.

Puoi iscriverti a SystemEvents.TimeChanged . Si triggers quando l’orologio di sistema viene modificato.

Ho risolto questo problema in un’app per 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 resettare l’intervallo per evitare la deriva.

   _timer1.Interval = (1000 - DateTime.Now.Millisecond);