利用委托机制处理.NET中的异常
概述
在.NET中,可以轻松的通过try-catch块来捕获异常。为了防止在应用程序中出现未处理的异常,可以通过添加一个全局的异常处理函数,如果是多线程的处理,还必须考虑除了主线程之外的工作线程中的异常处理办法,这里用委托机制来实现。
主线程的异常处理
使用Application对象中的ThreadException属性设置一个delegate来捕获所有的未处理的主线程中出现的异常。注意这个全局异常处理程序,只能捕获到主线程中的异常,对于我们自己添加的工作线程、辅助线程的异常是捕获不到的。
(Application.ThreadException(注意:这个事件需要关闭 JIT 异常调试功能再能被引发)和 AppDomain.CurrentDomain.UnhandledException 两个事件。)
在应用程序入口添加全局异常处理:
1
}
处理程序:
1
public static void MainUIThreadExceptionHandler(Exception ex)
2
}
2
工作线程的异常处理
编写多线程代码时,我们必须考虑在工作线程中出现的异常。在线程的入口使用try-catch块,并通过delegate将发生的异常通知给主线程。必须将异常信息通知主线程,否则应用程序不会报错,异常将会消失。
在线程入口使用try-catch块:
1
}
工作线程异常的处理:
1
}
总结
对于捕获到异常,我们可以Log到文件或者数据库,但是必须保证捕获到所有的异常,以上通过委托机制实现了.NET中的主线程以及工作线程中的异常捕获。
完整的程序代码:
1
using System;
2
using System.Drawing;
3
using System.Collections;
4
using System.ComponentModel;
5
using System.Windows.Forms;
6
using System.Data;
7
using System.Threading;
8
9
namespace UseDelegateException
10
2
3
4
5
6
7
8
9
10
转载自: http://terrylee.cnblogs.com/archive/2005/12/12/295243.html