5 votes

c# isBackground Le thread ne se termine PAS correctement

J'ai un thread d'arrière-plan que j'utilise pour le traitement séparément de l'interface graphique, et tout fonctionne bien entre les threads. Cependant, lorsque je ferme l'application, le programme se "ferme" mais ne tue pas le processus. Il semble que le thread d'arrière-plan maintienne le programme en vie.

J'ai défini "myThreadInstance.IsBackground = true ;", et je pensais que cela obligerait C# à le tuer lorsqu'il est tué.

Je teste tout cela dans Visual Studio (2010, avec .NET 4.0), et après la première construction, les autres échouent toutes parce que l'exe est toujours utilisé et qu'il ne peut pas être écrasé. Si vous regardez dans le gestionnaire de tâches, il est là. En tuant Visual Studio, on libère le processus vbhost qui libère mon exe. En tuant le processus de mon exe, vbhost le fait respawn en une seconde ou deux.

1voto

Stephen Cleary Points 91731

En fait, d'après votre description et les autres choses que vous avez essayées (et leurs résultats), je pense que la cause la plus probable est la suivante :

Vous avez un autre thread de premier plan dans votre application, autre que celui que vous examinez.

0voto

Chris Lively Points 59564

Ce type de problème nécessite généralement un code pour le résoudre. Prenez votre application et réduisez-la au strict minimum nécessaire pour montrer le problème.

Cependant, il est fort probable que vous ne signalez pas au thread qu'il doit se terminer ou que le thread est si long qu'il ne voit jamais le signal.

0voto

Sidharth Panwar Points 2550

Essayez d'utiliser Application.Exit(0) ; dans l'événement form_closing/form_closed.

Bug : Je pense que cela peut être un bug. Regardez les commentaires au bas de cette page MSDN : http://msdn.microsoft.com/en-us/library/system.threading.thread.isbackground.aspx

Essayez également d'utiliser le Travailleur d'arrière-plan . Voici une bonne description dans le magazine VisualStudio : http://visualstudiomagazine.com/articles/2007/09/01/simplify-background-threads.aspx

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X