本文主要是介绍WPF中未捕获异常之处理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
原帖地址:http://blog.csdn.net/luminji/article/details/5395595
异常有两类,一类是主线程异常,另一类是工作线程异常。
一:主线程的未捕获异常处理起来比较简单
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中未捕获异常之处理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!