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.

È stato utile?

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);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top