minuterie fiable dans une application console

voix
78

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

La façon dont fonctionne cette minuterie dans le contrôle de la minuterie est mis sur un autre thread donc il peut toujours cocher ainsi que les travaux commencent terminé sur le thread parent quand il est pas occupé.

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

J'essayé d' ajouter une while trueboucle, mais le fil conducteur est trop occupé lorsque la minuterie ne se déclenche.

Créé 01/08/2008 à 13:43
source utilisateur
Dans d'autres langues...                            


2 réponses

voix
50

Vous pouvez utiliser quelque chose comme Console.ReadLine()pour bloquer le thread principal, de sorte que d' autres fils de fond (comme les fils de la minuterie) continuera de fonctionner. Vous pouvez également utiliser un AutoResetEvent pour bloquer l'exécution, alors (quand vous avez besoin) , vous pouvez appeler la méthode Set () sur cet objet AutoResetEvent pour libérer le fil conducteur. Assurez -vous également que votre référence à l' objet minuterie ne va pas hors de portée et de déchets collectés.

Créé 01/08/2008 à 13:56
source utilisateur

voix
17

Pensez à utiliser un ManualResetEvent pour bloquer le thread principal à la fin de son traitement, et appeler Reset()à ce sujet une fois que le traitement de la minuterie est terminée. Si cela est quelque chose qui doit fonctionner en permanence, envisager de déplacer cela dans un processus de service au lieu d'une application de la console.

Créé 01/08/2008 à 13:55
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more