UnhandledException & ThreadException

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. Catching UnhandledException and ThreadException events 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

}

你可能感兴趣的:(exception)