2010-05-21 5 views

Répondre

3

Votre minuterie ne doit pas être réglée pour se déclencher toutes les 24 heures, elle doit être réglée pour se déclencher toutes les quelques secondes, ou minutes, et vérifier l'heure. Si l'heure est supérieure ou égale à l'heure à laquelle vous souhaitez que votre tâche se produise, exécutez la tâche.

+0

Bonne idée, merci – Henry99

0

En mode veille, la mémoire est généralement stockée telle quelle, puis rappelée lorsque vous la réactivez, ce qui peut empêcher votre horloge de se déclencher en mode veille ou d'avoir un comportement imprécis par rapport à ce que vous souhaitez.

+0

Merci, cela semble évident, vous avez raison. Si j'arrête mon système pendant 12h chaque jour, la minuterie s'épuisera comme tous les deux jours. – Henry99

1

La classe Timer est très détendue quant à l'augmentation de son événement Tick. En interne, à l'intérieur du code Windows, lorsque le temporisateur est dû, il ne définit qu'un indicateur interne, un peu comme "devrait livrer WM_TIMER". Cela n'arrive pas réellement tant que rien d'important ne doit être fait par la boucle de message. Tout message reçoit une priorité plus élevée que WM_TIMER.

Lorsque la boucle de messages Windows Forms appelle GetMessage(), la fonction vérifie si quelque chose doit être renvoyé. Si la réponse est "nothing" et que l'indicateur est défini, il fournit WM_TIMER. Et vous aurez l'événement Tick. Un couple de conséquences à partir de cela: vous pouvez jamais utiliser l'événement tic pour garder une trace de l'heure. Cela va inévitablement prendre du retard. Vous pouvez jamais obtenir l'événement Tick deux fois de suite, il ne rattrape pas. Mais pertinent à votre question: la boucle de message ne pompe pas quand la machine passe en mode veille, rien de spécial ne se passe.

Questions connexes