Minuterie fiable dans une application de console

Je suis conscient que dans .NET il y a trois types de minuterie (voir Comparaison des classes de minuteur dans la bibliothèque de classes .NET Framework ). J'ai choisi une minuterie filetée car les autres types peuvent dériver si le thread principal est occupé, et j'ai besoin de cela pour être fiable.

La façon dont cette minuterie fonctionne dans le contrôle de la minuterie est mis sur un autre fil de sorte qu'il peut toujours cocher avec le travail commence terminé sur le fil parent quand il n'est pas occupé.

Le problème avec ce temporisateur dans une application de console est que pendant que le temporisateur tourne sur un autre thread, le thread principal ne fait rien pour que l'application se ferme.

J'ai essayé d'ajouter une boucle while true , mais le thread principal est trop occupé quand la minuterie s'éteint.

0
ajouté édité
Vues: 17

2 Réponses

Vous pouvez utiliser quelque chose comme Console.ReadLine() pour bloquer le thread principal, ainsi les autres threads d'arrière-plan (comme les threads de minuterie) continueront à fonctionner. Vous pouvez également utiliser un AutoResetEvent pour bloquer l'exécution, alors (quand vous en avez besoin), vous pouvez appeler la méthode Set() sur cet objet AutoResetEvent pour libérer le thread principal. Assurez-vous également que votre référence à l'objet Timer ne sort pas de sa portée et qu'elle n'est pas collectée.

0
ajouté

Envisagez d'utiliser un ManualResetEvent à bloquez le thread principal à la fin de son traitement et appelez Reset() une fois que le traitement du timer est terminé. Si cela doit toujours être exécuté, envisagez de le déplacer dans un processus de service au lieu d'une application de console.

0
ajouté