Question

Je suis conscient du fait qu'il existe dans .NET trois types de minuteur (voir Comparaison des classes du 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.

Solution

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, alors (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 n’est pas en dehors de la portée et que les déchets sont récupérés.