109 votes

Minuterie fiable dans une application console

Je suis conscient que dans .NET il y a trois types de chronomètre (voir en Comparant les Classes Timer dans le .NET Framework Bibliothèque de Classe). J'ai choisi une tige de compteur de temps que les autres types de dérive si le thread principal est occupé, et j'ai besoin de cela pour être fiable.

La façon dont cette minuterie fonctionne dans la commande de la minuterie est de mettre sur un autre fil, il peut toujours rouler avec les travaux commencent terminé sur le parent fil quand il n'est pas occupé.

Le problème avec ce minuteur dans une application console, c'est que pendant que la minuterie à retardement sur un autre thread, le thread principal est de ne rien faire pour que l'application se ferme.

J'ai essayé d'ajouter un while true boucle, mais alors le thread principal est trop occupé lorsque la minuterie est désactivée.

61voto

huseyint Points 8196

Vous pouvez utiliser quelque chose comme Console.ReadLine() pour bloquer le thread principal. Ainsi, d'autres threads d'arrière-plan (comme les threads du minuteur) continueront de fonctionner. Vous pouvez également utiliser un AutoResetEvent pour bloquer l'exécution, puis (si nécessaire) 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 Minuteur ne sort pas de la portée et que les déchets sont collectés.

21voto

Greg Hurlman Points 10944

Pensez à utiliser un ManualResetEvent pour bloquer le thread principal à la fin de son traitement et appelez Reset() une fois le traitement du minuteur terminé. S'il est nécessaire de l'exécuter constamment, envisagez de le transformer en un processus de service plutôt qu'en une application de console.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X