Der Thread wurde mit dem Code 0 (0x0) ohne nicht behandelte Ausnahme beendet


92

Beim Debuggen meiner C # -Anwendung habe ich eine große Menge des folgenden Satzes festgestellt:

Der Thread - wurde mit dem Code 0 (0x0) beendet.

Die Anwendung funktioniert weiterhin und es wird keine Ausnahme abgefangen / nicht übergeben.

Die Anwendung läuft unter Windows 7 64-Bit und wird mit der x86-Plattform debuggt.


1
Bist du sicher, dass das deine Threads sind? Wenn ja, erwarten Sie nicht, dass sie fertig werden?
SLaks

Antworten:


136

Dies ist nur eine Debugging-Nachricht. Sie können dies ausschalten, indem Sie mit der rechten Maustaste in das Ausgabefenster klicken und das Kontrollkästchen deaktivieren Thread Exit Messages.

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

Zusätzlich zum Programmieren aus Ihrer Anwendung können im Ausgabefenster folgende Informationen angezeigt werden:

  • Module, die der Debugger geladen oder entladen hat.

  • Ausnahmen, die geworfen werden.

  • Prozesse, die beendet werden.

  • Threads, die beendet werden.


9

In einer Anwendung werden möglicherweise viele Threads parallel ausgeführt. Einige werden von Ihnen, dem Codierer, ausgeführt, andere von Framework-Klassen (insbesondere, wenn Sie sich in einer GUI-Umgebung befinden).

Wenn ein Thread seine Aufgabe beendet hat, wird er beendet und beendet, um zu existieren. Darin ist also nichts Alarmierendes und es sollte dich nicht interessieren.


Die Themen, über die ich gesprochen habe, gehören nicht mir (oder gehören nicht zu meiner Anwendung). Meine Anwendung muss jedoch eine Verbindung zu einem Linux-AIX-Server herstellen, der mit einer großen Anzahl nicht mehr funktionierender Prozesse zurückkehrt. Ich habe keine klare Vorstellung davon, wie dieser Server funktioniert (und welche Aufgaben er hat), aber ich nehme an, dass die oben genannten Threads das Serververhalten beeinflussen könnten.
Gionata

Nun, vielleicht wirken sich die Threads tatsächlich auf Ihre Anwendung aus, aber die Meldung, die Sie erhalten, sagt Ihnen, dass sie erfolgreich beendet werden. Sie könnten also versuchen herauszufinden, warum sie ausgeführt werden (Debug-Menü => Windows => Threads), aber dies ist normal, dass sie enden.
Kek

Sie enden normal, aber die nicht mehr funktionierenden Prozesse auf dem Linux-Server können ein Nebeneffekt von .net-Framework-Threads sein. Möglicherweise weist die Anwendung verschiedene Programmierfehler bei der Multithreading-Implementierung auf. Ist es möglich?
Gionata

Ich weiß es nicht. Auf diesem Linux-Server wird .NET ausgeführt? mit Mono? Was ist eigentlich dein Problem? Die nicht mehr existierenden Prozesse?
Kek

Ja, die Dufunct-Prozesse führen zum Absturz des Linux-Servers.
Gionata

7

Um die akzeptierte Antwort von BlueM zu vervollständigen, können Sie sie hier deaktivieren:

Extras> Optionen> Debugging> Allgemeine Ausgabeeinstellungen> Thread-Beendigungsnachrichten: Aus


4
Die akzeptierte Antwort von BlueM hat tatsächlich eine einfachere Lösung: "Sie können diese ausschalten, indem Sie mit der rechten Maustaste in das Ausgabefenster klicken und die Meldung" Thread beendet "
deaktivieren

5

Wenn Ihre Anwendung Threads direkt oder indirekt verwendet (dh hinter den Kulissen wie in einer Bibliothek eines Drittanbieters), ist es absolut üblich, dass Threads nach Abschluss beendet werden. Dies ist im Grunde das, was Sie beschreiben. Der Debugger zeigt diese Meldung an ... Sie können den Debugger so konfigurieren, dass diese Meldung nicht angezeigt wird, wenn Sie sie nicht möchten ...

Wenn das oben genannte nicht hilft, geben Sie bitte weitere Details an, da ich nicht sicher bin, mit welchem ​​Problem Sie genau konfrontiert sind ...


1

Das Framework erstellt Threads, um jedes von Ihnen erstellte Fenster zu unterstützen, z. B. beim Erstellen eines Formulars und .Show (). Wenn die Fenster geschlossen werden, werden die Threads beendet (dh sie werden beendet).

Dies ist normales Verhalten. Wenn die Anwendung jedoch Threads erstellt und es viele Thread-Exit-Meldungen gibt, die diesen Threads entsprechen (man kann dies möglicherweise an den Namen des Threads erkennen, indem man ihnen in der App unterschiedliche Namen gibt), deutet dies möglicherweise auf ein Problem hin Die App erstellt Threads, wenn dies aufgrund eines Programmlogikfehlers nicht der Fall sein sollte.

Es wäre eine interessante Folge, wenn das Originalposter uns mitteilen würde, was er / sie in Bezug auf die Probleme mit dem Absturz des Servers entdeckt hat. Ich habe das Gefühl, es hätte nichts damit zu tun ... aber es ist schwer anhand der veröffentlichten Informationen zu sagen.


1

Das Ausführen von Linq-Abfragen kann zusätzliche Threads generieren. Wenn ich versuche, Code auszuführen, der die Linq-Abfragesammlung im unmittelbaren Fenster verwendet, wird die Ausführung häufig abgelehnt, da dem Debugger nicht genügend Threads zur Verfügung stehen.

Wie andere gesagt haben, ist es völlig normal, dass Threads beendet werden, wenn sie fertig sind.


0

Ich habe mich auch diesem Problem gestellt und die Lösung ist:

  1. Öffnen Sie Solution Explore
  2. Doppelklicken Sie auf die Datei Program.cs

Ich habe diesen Code erneut hinzugefügt und mein Programm lief genau:

Application.Run(new PayrollSystem()); 
//File name this code removed by me accidentally.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.