Es ist möglich, für die eigene Anwendung an zentraler Stelle einen globalen Error-Handler zu installieren. Dieser wird aber nur dann benötigt, wenn die Anwendung nicht im Debug-Modus betrieben wird. Wird die Anwendung aus der Entwicklungsumgebung heraus gestartet, soll die Exception genau an der Stelle aufkommen, wo sie entsteht und nicht global abgefangen werden.
In der Hauptklasse eines Windows-Forms Projekts lässt sich das folgendermaßen ausdrücken:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#if !DEBUG try { #endif Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new MainForm()); #if !DEBUG } catch (Exception ex) { /* Do some logging or show an error dialog...or both */ } #endif |
Hierbei ist dann egal, auf welcher Ebene die Exception auftritt. Wird sie nicht im inneren Code behandelt, so erfolgt die Behandlung spätestens durch den hier kodierten Catch-Block.
Eine andere Möglichkeit besteht darin, einen Exception Event Handler zu installieren, hier z.B. im MainForm:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
public MainForm() { InitializeComponent(); // Globalen ErrorHandler zur Anwendung hinzufügen Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(OnThreadException); } #region ErrorHandler private void OnThreadException(Object sender, System.Threading.ThreadExceptionEventArgs t) { /* Do some logging or show an error dialog...or both use t.Exception to get information about the error */ } #endregion ErrorHandler |