Hallo zusammen,
ich habe meinen Exceptionhandler wie folgt geschrieben.
static void MyExceptionHandler(object sender, UnhandledExceptionEventArgs e)
{
Exception ex = e.ExceptionObject as Exception;
switch (ex.GetType())
{
default:
MessageBox.Show(ex.Message, ex.TargetSite.ToString(), MessageBoxButtons.OK, MessageBoxIcon.Error);
break;
}
}
Jetzt ist es do, dass er nach Ausgabe der Meldung, das Programm immer beendet. Wie kann ich das verhindern?
Viele Grüße
DeSchneller
Ich denke du musst noch folgendes setzen:
e.Handled = true;
Edit: das wird wohl noch nicht klappen, das gilt für DispatcherUnhandledExceptionEventArgs
“Knowledge cannot replace friendship. I'd rather be an idiot than lose you.”
Hallo DeSchneller,
das switch
kannst du dir -- zumindest wie es da steht -- sparen, da keine Fälle unterschieden werden (nur der default-Fall ist da).
Fürs switch
schau dir auch Using pattern matching switch statements an.
Wie kann ich das verhindern?
Es gibt auch Fehler die nicht behandelbar sind und den Prozess zwangsweise beenden. Z.B. StackOverflowException, OutOfMemoryException udgl. Siehe dazu auch AppDomain.UnhandledException.
Um welchen Tech-Stack handelt es sich: WinForms, WPF, ...?
Für die MessageBox interessant als Lektüre: Nenne deinen Fall, wo du denkst, ohne modalen Dialog geht es nicht, und ich nenne eine Alternative
mfG Gü
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.
"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
das
switch
kannst du dir -- zumindest wie es da steht -- sparen, da keine Fälle unterschieden werden (nur der default-Fall ist da).
Ja das ist mir schon klar, hab das auch jetzt nur als Beispiel gebracht. Die Unterscheidung wird noch durchgeführt.
Es gibt auch Fehler die nicht behandelbar sind und den Prozess zwangsweise beenden. Z.B. StackOverflowException, OutOfMemoryException udgl. Siehe dazu auch
> .Um welchen Tech-Stack handelt es sich: WinForms, WPF, ...?
Ja aber wenn ich es ja über einen normales TryCatch mache, läuft die Applikation auch normal weiter.
Hab aktuell WinForms noch im Einsatz.
Ja aber wenn ich es ja über einen normales TryCatch mache, läuft die Applikation auch normal weiter.
Nein, bei den von gfoidl genannten Exceptions funktioniert auch ein Try Catch nicht.
“Knowledge cannot replace friendship. I'd rather be an idiot than lose you.”
Ich habe es selber noch nicht benutzt, aber wenn ich das Beispiel zu Application.ThreadException richtig verstehe, dann kannst du damit alle UI-Exceptions abfangen und danach das Programm weiterlaufen lassen (ohne Application.Exit()
aufzurufen).
Der erste Satz im Kommentar zu der UnhandledException
-Ereignismethode ist m.E. aber falsch (wahrscheinlich ein C&P-Fehler), denn bei diesem Ereignis kann man das Beenden nicht verhindern.
Weitere Infos dazu habe ich noch in Global Exception Handler (WinForms) gefunden.
PS: Für jeden weiteren (Worker-)Thread müßtest du selber für ein geeignetes Exception-Handling sorgen.
Ein globaler Exceptionhandler sollte NIEMALS benutzt werden um Exceptions zu behandeln und dann einfach weiter zumachen.
Er ist nur zum loggen und evtl zum aufräumen zu benutzen.