Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Fehlermeldungen zentral abfangen ohne Programm danach zu beenden
DeSchneller
myCSharp.de - Member



Dabei seit:
Beiträge: 26
Herkunft: KA

Themenstarter:

Fehlermeldungen zentral abfangen ohne Programm danach zu beenden

beantworten | zitieren | melden

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

private Nachricht | Beiträge des Benutzers
Urza
myCSharp.de - Member



Dabei seit:
Beiträge: 45

beantworten | zitieren | melden

Ich denke du musst noch folgendes setzen:


e.Handled = true;

Edit: das wird wohl noch nicht klappen, das gilt für DispatcherUnhandledExceptionEventArgs
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Urza am .
“Knowledge cannot replace friendship. I'd rather be an idiot than lose you.”

- Patrick to Spongebob
private Nachricht | Beiträge des Benutzers
gfoidl
myCSharp.de - Team

Avatar #avatar-2894.jpg


Dabei seit:
Beiträge: 7538
Herkunft: Waidring

beantworten | zitieren | melden

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.
Zitat
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!"
private Nachricht | Beiträge des Benutzers
DeSchneller
myCSharp.de - Member



Dabei seit:
Beiträge: 26
Herkunft: KA

Themenstarter:

beantworten | zitieren | melden

Zitat von gfoidl
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.
Zitat von gfoidl
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, ...?

Ja aber wenn ich es ja über einen normales TryCatch mache, läuft die Applikation auch normal weiter.

Hab aktuell WinForms noch im Einsatz.




private Nachricht | Beiträge des Benutzers
Urza
myCSharp.de - Member



Dabei seit:
Beiträge: 45

beantworten | zitieren | melden

Zitat
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.”

- Patrick to Spongebob
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4001

beantworten | zitieren | melden

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.

private Nachricht | Beiträge des Benutzers
FZelle
myCSharp.de - Experte



Dabei seit:
Beiträge: 10072

beantworten | zitieren | melden

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.

private Nachricht | Beiträge des Benutzers