winform全局异常处理
winform的异常主要包括UI线程异常和处理非UI线程异常。
如何处理这两个异常呢?
1.使用Application.ThreadException事件可以处理UI线程的异常,并且可以阻止应用程序终止。
2.使用Application.UnhandledException事件来处理非UI线程异常,但是却并不能阻止应用程序的终止。
那么如果要完成一个自动处理的模块,当异常抛出后,检索异常的来源,并记录到日志并且处理异常后,重新执行出现异常的模块,使用上面的UnhandledException事件可以很好的检索到异常的发生,但是处理后,应用程序还是会退出的。
参照msdn上的Enterprise Library中的Exception Application Block,进行全局异常处理的方法如下所示:
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.SetCompatibleTextRenderingDefault(false);
#region 线程异常处理 全局的异常处理
Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
#endregion
Application.Run(new FrmLogin());
}
/// <summary>
/// 线程异常处理
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
{
//在此处添加上你要写日志的方法
MessageBox.Show(e.Exception.Message);
}
static void CurrentDomain_UnhandledException (object sender,System.Threading.ThreadExceptionEventArgs e)
{
//此处写获取的日志
LogUnhandledException(e.ExceptionObject);
}