c# - Minuterie fiable dans une application console

Translate

Je suis conscient que dans.NETil existe trois types de minuterie (voirComparaison des classes de minuterie 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 placée sur un autre thread afin qu'il puisse toujours cocher avec le début du travail terminé sur le thread parent lorsqu'il n'est pas occupé.

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

J'ai essayé d'ajouter unwhile trueboucle, mais le thread principal est trop occupé lorsque la minuterie se déclenche.

This question and all comments follow the "Attribution Required."

Toutes les réponses

Translate

Vous pouvez utiliser quelque chose commeConsole.ReadLine()pour bloquer le thread principal, ainsi les autres threads d'arrière-plan (comme les threads de minuterie) fonctionneront toujours. Vous pouvez également utiliser unAutoResetEventpour bloquer l'exécution, puis (lorsque 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 n'est pas hors de portée et n'est pas collectée.

La source
Translate

Pensez à utiliser unManualResetEventpour bloquer le thread principal à la fin de son traitement, et appelezReset()dessus une fois le traitement du minuteur terminé. Si c'est quelque chose qui doit s'exécuter en permanence, envisagez de le déplacer dans un processus de service au lieu d'une application console.

La source