C#处理未捕获的异常

尽管在程序中添加了try…catch来处理异常,也很难保证程序就不抛异常,程序崩溃是件令人很不爽的事情,在.net应用程序级别,如何体面的处理异常呢?

核心代码如下:

1
2
3
4
5
6
7
8
9
// 此事件处理程序用于捕获UI线程中未处理的异常
Application.ThreadException += new ThreadExceptionEventHandler(ErrorHandlerForm.Form1_UIThreadException);

// 强制将所有UI线程中的异常交由Application.ThreadException处理
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);

// 处理非UI线程中未处理的异常
AppDomain.CurrentDomain.UnhandledException +=
    new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);

程序中有些异常出现后,必须要关闭程序,以免影响应用程序状态,我们可以再处理异常的代码中记录日志,保存应用程序状态信息,妥善的处理异常,给用户友好的体验。