J'ai un service Windows écrit en .NET 3.5 (C#) avec un System.Threading.Timer qui engendre plusieurs Threads dans chaque rappel. Ce sont juste des threads normaux (pas de pool de threads) et j'ai mis le IsBackground = true sur chaque thread puisque je vais seulement exécuter du code managé. Lorsqu'un utilisateur arrête le service, qu'arrive-t-il à tous les threads? Est-ce qu'ils meurent gracieusement? Je n'ai aucun code qui gère les threads en appelant join ou abort. Est-il correct de supposer que le IsBackground = true est suffisant pour supposer que les threads seront éliminés et arrêtés lorsqu'un utilisateur arrête le service? Que se passe-t-il exactement lorsque quelqu'un arrête un service Windows via l'interface graphique de Service Manager? Est-ce que cela tue le processus après qu'il déclenche l'événement OnStop? Cela pourrait être acceptable pour moi parce que j'ai construit un mécanisme séparé qui permet à un utilisateur de savoir à coup sûr qu'il n'y a pas de threads avant d'arrêter le service. Cela est effectué via 2 méthodes WCF exposées à partir d'un ServiceHost qui s'exécute dans le service Windows. Il existe une méthode pour arrêter de générer de nouveaux threads et une autre méthode pour interroger le nombre de threads en cours d'exécution.Arrêt d'un service Windows qui a des threads
Je suis juste curieux de savoir ce qui se passe si elles sauter ces étapes et juste arrêter le service ... Il semble que le IsBackground aide y parvenir:
Merci, ceci fonctionne très bien! – ECC