Obtenir un changement d'horloge système en C #
Question
S'agit-il d'un moyen d'exécuter un délégué
ou un événement
en C # lorsque les secondes, les minutes, les heures, ... changent dans l'horloge système sans utiliser timer qui vérifie chaque milliseconde si la propriété a été modifiée et exécute l'événement avec un délai maximal d'une milliseconde.
Je souhaite donc éviter l'interrogation et déclencher un événement à une certaine heure.
La solution
Si votre question est: "Comment exécuter un délégué toutes les secondes / minutes / heures?"
Pour les minutes et les heures, vous pouvez procéder comme indiqué dans ma réponse à cette question SO:
Cela devrait être assez précis, mais pas à la milliseconde.
Pour les deuxièmes intervalles, je choisirais une minuterie avec un simple intervalle d'une seconde. Du point de vue de l'utilisateur, il n'y a pas beaucoup de différence si l'action s'exécute à xx: xx: xx.000 ou à xx: xx: xx.350.
Autres conseils
Vous pouvez vous abonner à SystemEvents.TimeChanged . Cela se déclenche lorsque l’horloge système est modifiée.
J'ai résolu ce problème dans une application de formulaires en définissant l'intervalle sur (1000 - DateTime.Now.Millisecond)
_timer1 = new System.Windows.Forms.Timer();
_timer1.Interval = (1000 - DateTime.Now.Millisecond);
_timer1.Enabled = true;
_timer1.Tick += new EventHandler(updateDisplayedTime);
et dans le gestionnaire d'événements, réinitialisez l'intervalle pour éviter toute dérive.
<handle event>
_timer1.Interval = (1000 - DateTime.Now.Millisecond);