Le thread s'est terminé avec le code 0 (0x0) sans exception non gérée

93

Lors du débogage de mon application C #, j'ai remarqué un grand nombre d'occurrences de la phrase suivante:

Le thread - est sorti avec le code 0 (0x0).

L'application continue de fonctionner et aucune exception n'est interceptée / non gérée.

L'application s'exécute sous Windows 7 64 bits et déboguée avec la plate-forme x86.

Gionata
la source
1
Êtes-vous sûr que ce sont vos fils? Si oui, ne vous attendez-vous pas à ce qu’ils finissent?
SLaks

Réponses:

137

Ceci est juste un message de débogage. Vous pouvez désactiver cela en faisant un clic droit dans la fenêtre de sortie et en décochant Thread Exit Messages.

http://msdn.microsoft.com/en-us/library/bs4c1wda.aspx

En plus de programmer à partir de votre application, la fenêtre Sortie peut afficher les informations sur:

  • Modules que le débogueur a chargés ou déchargés.

  • Les exceptions qui sont lancées.

  • Processus qui sortent.

  • Threads qui sortent.

BlueM
la source
10

Eh bien, une application peut avoir de nombreux threads en parallèle. Certains sont exécutés par vous, le codeur, d'autres sont exécutés par des classes de framework (surtout si vous êtes dans un environnement GUI).

Lorsqu'un thread a terminé sa tâche, il se ferme et cesse d'exister. Il n'y a rien d'alarmant à cela et vous ne devriez pas vous en soucier.

Kek
la source
Les threads dont j'ai parlé ne sont pas les miens (ou n'appartiennent pas à mon application). Cependant, mon application doit se connecter à un serveur Linux AIX qui revient avec une énorme quantité de processus obsolètes. Je n'ai pas une idée claire des travaux de ce serveur (et quelles sont ses tâches) mais je suppose que les threads susmentionnés pourraient avoir un impact sur le comportement du serveur.
Gionata
Eh bien, peut-être que les threads ont un impact réel sur votre application, mais le message que vous recevez vous indique qu'ils se terminent avec succès. Vous pouvez donc essayer de trouver pourquoi ils sont exécutés (menu Déboguer => windows => threads), mais c'est normal qu'ils se terminent.
Kek le
Ils se terminent normalement mais les processus obsolètes du serveur Linux pourraient être un effet secondaire des threads du framework .net. Peut-être que l'application a diverses erreurs de programmation dans l'implémentation multithreading. C'est possible?
Gionata le
Je ne sais pas. Ce serveur linuw exécute .NET? en utilisant Mono? Quel est votre problème en fait? Les processus défunts?
Kek
Oui, les processus défaillants faisant planter le serveur Linux.
Gionata
7

Afin de compléter la réponse acceptée de BlueM, vous pouvez la désactiver ici:

Outils> Options> Débogage> Paramètres généraux de sortie> Messages de sortie de thread: Désactivé

alphanoch
la source
4
La réponse acceptée de BlueM a en fait une solution plus simple: «Vous pouvez désactiver cela en cliquant avec le bouton droit de la souris dans la fenêtre de sortie et décocher le message de fin de discussion»
Simon MᶜKenzie
5

si votre application utilise des threads directement ou indirectement (c'est-à-dire derrière la scène comme dans une bibliothèque tierce), il est tout à fait courant que les threads se terminent une fois qu'ils sont terminés ... ce qui est essentiellement ce que vous décrivez ... le débogueur affiche ce message ... vous pouvez configurer le débogueur pour ne pas afficher ce message si vous ne le souhaitez pas ...

Si ce qui précède ne vous aide pas, veuillez fournir plus de détails car je ne sais pas exactement quel est le problème auquel vous êtes confronté ...

Yahia
la source
1

Le framework crée des threads pour prendre en charge chaque fenêtre que vous créez, par exemple, comme lorsque vous créez un formulaire et .Show (). Lorsque les fenêtres se ferment, les threads sont terminés (c'est-à-dire qu'ils se terminent).

C'est un comportement normal. Cependant, si l'application crée des threads et qu'il y a beaucoup de messages de sortie de thread correspondant à ces threads (on pourrait peut-être dire par les noms des threads, en leur donnant des noms distincts dans l'application), alors peut-être que cela indique un problème avec l'application créant des threads alors qu'elle ne le devrait pas, en raison d'une erreur de logique du programme.

Ce serait une suite intéressante que l'affiche originale nous fasse savoir ce qu'il / elle a découvert concernant les problèmes de plantage du serveur. J'ai le sentiment que cela n'aurait rien à voir avec ça ... mais c'est difficile à dire d'après les informations publiées.

JoGusto
la source
1

L'exécution de requêtes Linq peut générer des threads supplémentaires. Lorsque j'essaie d'exécuter du code qui utilise la collection de requêtes Linq dans la fenêtre immédiate, il refuse souvent de s'exécuter car il n'y a pas assez de threads disponibles pour le débogueur.

Comme d'autres l'ont dit, il est parfaitement normal que les threads se terminent lorsqu'ils sont terminés.

Tonyb
la source
0

J'ai également rencontré ce problème et la solution est:

  1. ouvrir la solution Explorer
  2. double-cliquez sur le fichier Program.cs

J'ai à nouveau ajouté ce code et mon programme s'est exécuté avec précision:

Application.Run(new PayrollSystem()); 
//File name this code removed by me accidentally.
Shanansari
la source