visual - utilisation timer c#




Minuterie fiable dans une application console (2)

Je suis conscient qu'il existe trois types de minuteur dans .NET (voir Comparaison des classes de minuteur dans la bibliothèque de classes .NET Framework ). J'ai choisi un minuteur fileté car les autres types peuvent dériver si le fil principal est occupé et j'ai besoin que cela soit fiable.

La façon dont ce minuteur fonctionne dans le contrôle du minuteur 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 ce minuteur dans une application console est que, même si le minuteur 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 while true , mais le thread principal est trop occupé lorsque la minuterie s'éteint.


Envisagez d'utiliser un objet ManualResetEvent pour bloquer le thread principal à la fin de son traitement et appelez Reset() dessus 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.


Vous pouvez utiliser quelque chose comme Console.ReadLine() pour bloquer le thread principal. Ainsi, d'autres threads d'arrière-plan (tels que 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.





timer