Ich möchte etwas wie eine "catch-all" für Ausnahmen aus einem Steuerelement oder einem Formular innerhalb der aktuellen Thread geworfen haben, aber ohne Rückgriff auf die Verwendung der Application.ThreadException
des gesamten Threads.Gibt es in C# eine Möglichkeit, alle Ausnahmen von einem Steuerelement/Formular abzufangen?
Warum? Weil ich die Ausnahmebehandlung modular halten möchte.
Der gesamte Code, der die Probleme verursachen kann, wird in einem Formular (DummyForm
) ausgeführt, das innerhalb des aktuellen Threads ausgeführt wird. Ich möchte in der Lage sein, alle von ihnen in eine andere Ausnahme (DummyFormException
) zu wickeln, die dieses Formular als Ursache der Ausnahme identifizieren würde, so dass, wenn diese Ausnahme es auf die Application.ThreadException schafft, kann ich die Bereinigung wissen schließt schließen DummyForm
.
Die Alternativen, wie ich sie sehe, sind:
# Wrap jede einzelne geworfen Ausnahme in der DummyForm
mit einem DummyFormException
. Ich mag das nicht so sehr, da zukünftige Programmierer sich daran erinnern müssen, jede ausgelöste Ausnahme ebenfalls zu umbrechen. # Führen Sie die DummyForm
in einem eigenen Thread, und verwenden Sie Application.ThreadException
, um sie zu fangen, und identifizieren Sie den Thread in diesem Code. Sobald ich weiß, woher es kommt, könnte ich einfach die DummyForm
schließen und den Thread beenden.
Gibt es eine Möglichkeit, dies ohne Multi-Threading zu tun? Ich würde es hassen, es scheint eine Verschwendung nur für die Fehlerbehandlung zu sein. Oder mache ich das alles falsch?
Ich denke, es gibt keinen Zauberstab, nicht wahr? Vielen Dank! – scraimer
@ Scraimer: Nun, es gibt einen Zauberstab (ThreadException, UnhandledDomainException zum Beispiel). Aber es gibt eine Rolle, unerwartete Ausnahmen zu fangen. Wenn Sie irgendwo eine Ausnahme erwarten, sollten Sie Ihren Code für die Ausnahmebehandlung schreiben, nicht in den globalen Handlern! – Brann