Question

Je suis conscient que dans .FILET 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 car les autres types peuvent dériver si le thread principal est occupé, et j'en ai besoin pour être fiable.

La façon dont ce minuteur fonctionne sous le contrôle du minuteur est placée sur un autre thread afin qu'il puisse toujours suivre 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 pendant que le minuteur tourne sur un autre thread, le thread principal ne fait rien pour que l'application se ferme.

J'ai essayé d'ajouter un while true boucle, mais le thread principal est trop occupé lorsque le minuteur se déclenche.

Était-ce utile?

La solution

Vous pouvez utiliser quelque chose comme Console.ReadLine() pour bloquer le thread principal, afin que les autres threads d'arrière-plan (comme les threads de minuterie) fonctionnent toujours.Vous pouvez également utiliser un Événement de réinitialisation automatique 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 la portée et n'est pas récupérée.

Autres conseils

Pensez à utiliser un Événement de réinitialisation manuelle pour bloquer le thread principal à la fin de son traitement, et appeler Reset() dessus une fois le traitement de la minuterie terminé.S'il s'agit de quelque chose qui doit s'exécuter en permanence, envisagez de le déplacer vers un processus de service plutôt que vers une application console.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top