WPF中未捕获异常之处理
2010-03-19 11:00
232 查看
异常有两类,一类是主线程异常,另一类是工作线程异常。
一:主线程的未捕获异常处理起来比较简单
1:首先在APP.XAML中定义一个DispatcherUnhandledException事件,如
2:其次,事件函数可以如下:
二:工作线程异常的捕获
对于工作线程的未捕获异常,也就是你主线程中,新起了一个线程,然后这个线程抛出的异常。如果你不做特殊处理,则光靠DispatcherUnhandledException是捕获不了的。
所以,我们就要对工作线程的异常进行重新包装。事实上,也就是用到了WPF中的主线程的Dispatcher。如下代码:
注意,上面代码中的PageMain.GetInstance().Dispatcher,就是获取主线程(也即主页面的)的Dispatcher。PageMain.GetInstance()就是主页面的一个单例,想必大家都已经很清楚如何实现了。
一:主线程的未捕获异常处理起来比较简单
1:首先在APP.XAML中定义一个DispatcherUnhandledException事件,如
<Application x:Class="CET.ExamViewer.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" StartupUri="WinMain.xaml" DispatcherUnhandledException="App_DispatcherUnhandledException" > <Application.Resources> </Application.Resources> </Application>
2:其次,事件函数可以如下:
void App_DispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e) { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.AppendFormat("应用程序出现了未捕获的异常,{0}/n", e.Exception.Message); if (e.Exception.InnerException != null) { stringBuilder.AppendFormat("/n {0}", e.Exception.InnerException.Message); } stringBuilder.AppendFormat("/n {0}", e.Exception.StackTrace); MessageBox.Show(stringBuilder.ToString()); e.Handled = true; }
二:工作线程异常的捕获
对于工作线程的未捕获异常,也就是你主线程中,新起了一个线程,然后这个线程抛出的异常。如果你不做特殊处理,则光靠DispatcherUnhandledException是捕获不了的。
所以,我们就要对工作线程的异常进行重新包装。事实上,也就是用到了WPF中的主线程的Dispatcher。如下代码:
public void 工作函数() { try { some code may be throw new Exception("我是工作线程的异常信息"); } catch (Exception ex) { PageMain.GetInstance().Dispatcher.Invoke((MethodInvoker)delegate { throw ex; }); } }
注意,上面代码中的PageMain.GetInstance().Dispatcher,就是获取主线程(也即主页面的)的Dispatcher。PageMain.GetInstance()就是主页面的一个单例,想必大家都已经很清楚如何实现了。
相关文章推荐
- wpf 全局异常捕获处理
- WPF捕获未处理的异常
- WPF 程序 处理未捕获异常,和程序莫名终止说拜拜
- WPF 程序未处理异常 的捕获
- WPF捕获未处理的异常
- 关于未捕获异常的处理(WPF)
- WPF 之 未捕获异常的处理
- 关于未捕获异常的处理(WPF)
- WPF捕获全局未处理异常
- 关于未捕获异常的处理(WPF)
- 关于未捕获异常的处理(WPF)
- WPF 程序 处理未捕获异常,和程序莫名终止说拜拜
- WPF中Dispatcher未捕获异常之处理
- 关于未捕获异常的处理(WPF)
- WPF处理未捕获的异常
- WPF处理未捕获的异常
- OBject-C捕获异常,常用的异常处理方法
- C# WinForm捕获未处理的异常
- C# WinForm捕获未处理的异常
- Crash: 处理UncaughtExcption,捕获未处理异常信息,界面友好提示用户