When developing windows/console applications using. Net, it is recommended to catch the following two exceptions:
- AppDomain. CurrentDomain. UnhandledException
- Application. ThreadException
If there are some uncaught exceptions raised in a app-domain, the system default handler will report the exception and terminates the application by default. and if raised in a thread, the thread may be blocked. catchingUnhandledExceptionAndThreadExceptionEvents provides us a way of creating robust applications.
The following code segements demonstrate how to make use of the two events:
static void Main(){ try { // Setup unhandled exception handlers AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(OnUnhandledException); // Unhandled Forms exceptions will be delivered to our ThreadException handler Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(AppThreadException); // Other code .... } catch( Exception e ) { .... }}/// <summary>/// CLR unhandled exception/// </summary>private static void OnUnhandledException(Object sender, UnhandledExceptionEventArgs e){ HandleUnhandledException(e.ExceptionObject);}/// <summary>/// Displays dialog with information about exceptions that occur in the application./// </summary>private static void AppThreadException(object source, System.Threading.ThreadExceptionEventArgs e){ HandleUnhandledException(e.Exception);}private static void HandleUnhandledException(Object o){ Exception exp = o as Exception; MessageBox.Show(exp.Message, "Application Error", MessageBoxButtons.OK, MessageBoxIcon.Stop); Application.Exit(); // Shutting down}