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.

Était-ce utile?

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);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top