异常有两类,一类是主线程异常,另一类是工作线程异常。
一:主线程的未捕获异常处理起来比较简单
1:首先在APP.XAML中定义一个DispatcherUnhandledException事件,如
2:其次,事件函数可以如下:
二:工作线程异常的捕获
对于工作线程的未捕获异常,也就是你主线程中,新起了一个线程,然后这个线程抛出的异常。如果你不做特殊处理,则光靠DispatcherUnhandledException是捕获不了的。
所以,我们就要对工作线程的异常进行重新包装。事实上,也就是用到了WPF中的主线程的Dispatcher。如下代码:
注意,上面代码中的PageMain.GetInstance().Dispatcher,就是获取主线程(也即主页面的)的Dispatcher。PageMain.GetInstance()就是主页面的一个单例,想必大家都已经很清楚如何实现了。