Dies steht in Beziehung zu einer previous question.Warum beenden AppDomain-Ausnahmen die Anwendung ausnahmslos?
Was ich jetzt zu verstehen versuche ist, wie verhindert werden kann, dass UI-Thread-Ausnahmen die Anwendung beenden können, während Nicht-UI-Ausnahmen nicht sein können.
Als Referenz siehe this example.
Am wichtigsten ist, was ich in diesem Fall tun könnte, ist "still" den Prozess zu beenden - ohne die Windows-Dialogbox anzuzeigen, die fragt, ob ich einen Fehlerbericht senden möchte oder nicht.
Das ist mein AppDomain UnhandledExceptionHandler:
private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
try
{
// Maybe do some logging here if allowed
}
catch
{
}
// then just terminate the application
Application.Exit();
}
UPDATE
Im Lichte der Kommentare in this answer, würde ich, dass vor allem zu klären, wie ich mehr über den Mechanismus finden, möchte darauf, dass ermöglicht dem UI-Thread eine frühe Möglichkeit, nicht behandelte Ausnahmen über den Application.ThreadException
-Mechanismus abzufangen. Und ob ein solches Verhalten in einem Nicht-UI-Thread implementiert werden könnte.
@Reed zu deaktivieren: „Unbehandelte Ausnahmen in dem UI-Thread das gleiche verursachen etwas passieren. " - das ist nicht wahr. Bitte erstellen Sie eine Testanwendung und probieren Sie es selbst aus. –
Technisch hätte ich "Unhandled Exceptions auf dem Hauptthread" sagen sollen. Windows Forms fügt ein eigenes Verhalten zur Ausnahmebehandlung für den Benutzeroberflächenthread hinzu (da es vollständig im Benutzeroberflächenthread ausgeführt wird), der das Verhalten des Hauptthreads ändert. Machen Sie eine Konsolenanwendung, und versuchen Sie dies, und Sie werden sehen, dass es egal ist, auf welchem Thread Dinge vorkommen - sie werden alle die Anwendung abreißen. –
Dann sollte ich meine Frage neu formulieren: Wie erreicht der UI-Thread das allgemeine Ausnahmebehandlungsverhalten? Ist das etwas, das ich als Verhalten für einen Nicht-UI-Thread replizieren könnte? –