品牌网线seo的描述正确
web/
2025/9/26 3:05:51/
文章来源:
品牌网线,seo的描述正确,邮箱注册网站申请,wordpress 网页慢转载自#xff1a;http://www.cnblogs.com/chenxizhang/p/3280947.html
这一篇文章来谈谈对于WPF应用程序开发中的未捕获异常的处理。
首先#xff0c;我们当然是要求应用程序开发人员#xff0c;尽可能地在程序可能出现异常的地方都去捕捉异常#xff0c;使用try…catch的…转载自http://www.cnblogs.com/chenxizhang/p/3280947.html
这一篇文章来谈谈对于WPF应用程序开发中的未捕获异常的处理。
首先我们当然是要求应用程序开发人员尽可能地在程序可能出现异常的地方都去捕捉异常使用try…catch的方式。但是总是有一些意外的情况可能会发生这就导致会出现所谓的“未捕获异常UnhandledException”。对于这一类异常如果我们没有一个合适的策略进行处理则当其发生的时候会给用户带来不太好的使用体验。例如下面这样备注这个截图是在Windows 8上面做的其他操作系统看到的界面可能略有不同。
用户看到这个窗口的时候其实一般只能点击Close the prograrm按钮。也就是说这种情况下会导致用户无法继续使用这个程序而且他们还得不到任何具体的消息到底发生了什么事情了除非他们去查看Windows的事件日志。但一般的用户是不太会这个操作的
查看Windows的事件日志https://jingyan.baidu.com/article/91f5db1b057fb61c7e05e375.html我们可以看到在Windows事件日志中会有两个具体的事件。首先是一个.NET Runtime的事件然后是一个Application Error的事件通常来说这样的用户体验有值得改进的地方。我们虽然不能防止异常的产生但是当意外发生的时候我们应该要以更好地方式地通知到用户或者尽可能地不要影响用户当前的操作。在WPF这种应用程序中会有两大类未处理异常一类是在UI线程抛出来的例如点击了用户界面上面的某个控件然后执行某个代码的时候遇到了异常另一类是非UI线程跑出来的例如在一个多线程的程序里面工作线程的代码遇到了异常。
对于UI线程的未处理异常我们可以通过监控下面这个事件来处理
Application.Current.DispatcherUnhandledException http://msdn.microsoft.com/en-us/library/system.windows.application.dispatcherunhandledexception.aspx
一个参考代码如下
using System;
using System.Windows;namespace WpfApplicationExceptionSample
{/// summary/// Interaction logic for App.xaml/// /summarypublic partial class App : Application{public App(){Application.Current.DispatcherUnhandledException Current_DispatcherUnhandledException;}void Current_DispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e){MessageBox.Show(我们很抱歉当前应用程序遇到一些问题该操作已经终止请进行重试如果问题继续存在请联系管理员., 意外的操作, MessageBoxButton.OK, MessageBoxImage.Information);//这里通常需要给用户一些较为友好的提示并且后续可能的操作e.Handled true;//使用这一行代码告诉运行时该异常被处理了不再作为UnhandledException抛出了。}}
}运行的效果大致如下对于非UI线程抛出的未处理异常我们需要监控另外一个事件来处理
AppDomain.CurrentDomain.UnhandledException http://msdn.microsoft.com/en-us/library/system.appdomain.unhandledexception.aspx
一个参考代码如下
using System;
using System.Windows;namespace WpfApplicationExceptionSample
{/// summary/// Interaction logic for App.xaml/// /summarypublic partial class App : Application{public App(){AppDomain.CurrentDomain.UnhandledException CurrentDomain_UnhandledException;}void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e){MessageBox.Show(我们很抱歉当前应用程序遇到一些问题该操作已经终止请进行重试如果问题继续存在请联系管理员., 意外的操作, MessageBoxButton.OK, MessageBoxImage.Information);}}
}令人不解的是这个事件中没有和前面那个事件一样的e.Handled参数就是说虽然这样是可以捕捉到非UI线程的异常而且也可以进行相应的处理但是应用程序还是会退出也就是说这个异常还是被当作是未处理异常继续汇报给Runtime。
为了改进这一点我们可以通过修改配置文件来实现。
?xml version1.0 encodingutf-8 ?
configurationruntimelegacyUnhandledExceptionPolicy enabled1//runtimestartupsupportedRuntime versionv4.0 sku.NETFramework,Versionv4.5 //startup
/configuration这里的legacyUnhandledExceptionPolicy如果enabled1的话用意是使用早期版本的异常处理策略。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/81970.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!