Okay, das ist einfach:
Was ist der Unterschied zwischen
Application.ThreadException
undAppDomain.CurrentDomain.UnhandledException
?Muss ich mit beiden umgehen?
Vielen Dank!
quelle
Okay, das ist einfach:
Was ist der Unterschied zwischen Application.ThreadException
und AppDomain.CurrentDomain.UnhandledException
?
Muss ich mit beiden umgehen?
Vielen Dank!
Application.ThreadException ist spezifisch für Windows Forms. Winforms führt Ereignishandler als Antwort auf von Windows an Winforms gesendete Nachrichten aus. Das Click-Ereignis zum Beispiel, ich bin sicher, dass Sie sie kennen. Wenn ein solcher Ereignishandler eine Ausnahme auslöst, gibt es in der Winforms-Nachrichtenschleife einen Back-Stop, der diese Ausnahme abfängt.
Dieser Backstop löst das Application.ThreadException- Ereignis aus. Wenn Sie es nicht überschreiben, erhält der Benutzer einen ThreadExceptionDialog . Dadurch kann er die Ausnahme ignorieren und Ihr Programm weiter ausführen. Übrigens keine gute Idee.
Sie können dieses Verhalten deaktivieren, indem Sie Application.SetUnhandledExceptionMode () in der Main () -Methode in Program.cs aufrufen . Ohne diesen Backstop geschieht das Übliche, wenn ein Thread aufgrund einer nicht behandelten Ausnahme stirbt: AppDomain.UnhandledException wird ausgelöst und das Programm wird beendet.
Fwiw: "ThreadException" war eine sehr schlechte Namenswahl. Es hat nichts mit Threads zu tun.
Application.ThreadException
. Ich habe hier [mit ] meinem kleinen C # -Code eine Frage dazu gestellt .Aus der Quelle :
Application.ThreadException
kann abgefangen werden und die Anwendung könnte fortgesetzt werden (im Allgemeinen ist dies keine gute Idee, aber für die Anwendung, die regelmäßig einige Aktionen ausführt, ist dies eine gute Lösung).Verwenden Sie die Option zum Abfangen von Ausnahmen, die in Threads auftreten, die nicht von Windows Forms erstellt wurden und deren Eigentümer Windows Forms ist
AppDomain.UnhandledException
. Es ermöglicht der Anwendung, Informationen über die Ausnahme zu protokollieren, bevor der Systemstandardhandler die Ausnahme an den Benutzer meldet und die Anwendung beendet.Die Behandlung dieser Ausnahme verhindert nicht, dass die Anwendung beendet wird.
Das Maximum, das getan werden kann (Programmdaten können beschädigt werden, wenn Ausnahmen nicht behandelt werden), ist das Speichern von Programmdaten für eine spätere Wiederherstellung. Danach wird die Anwendungsdomäne entladen und die Anwendung beendet.
Weitere Informationen finden Sie unter MSDN .
quelle
OK - ich hatte es vor mir, dieser Code von msdn ist ziemlich selbsterklärend:
quelle
Nun, die Sache ist,
ThreadException
tritt aufgrund eines Problems mit Ihrem Thread auf, dasUnhandled Exception
ausgelöst wird, wenn Sie Code eine Ausnahme auslösen, die nicht behandelt wird.Der einfachste Weg, den zweiten zu verursachen, besteht darin, eine App ohne Versuch zu erstellen ... Blöcke zu fangen und eine Ausnahme auszulösen.
Wenn Sie jetzt eine Versicherung benötigen, können Sie beide behandeln. Wenn Sie jedoch Ihre
exceptions
Daten erfassen und korrekt behandeln, sollten Sie denUnhandledException
Handler nicht benötigen, da er wie ein Fang für alle ist.quelle