打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
应用程序统一捕获未知异常
userphoto

2011.09.07

关注

   在开发中,我们并不能考虑到所有异常,在应用程序出现异常,会抛出一个不友好的界面,并且很多代码信息会显示。如下图:

从图中我们可以看到,是因为索引超出了数组界限,如何统一抛出一个友好提示,并且屏蔽掉敏感信息?在Winfrom中可以使用Application.ThreadException 事件,此事件允许 Windows 窗体应用程序处理 Windows 窗体线程中所发生的其他未经处理的异常。请将事件处理程序附加到 ThreadException 事件以处理这些异常,因为这些异常将使您的应用程序处于未知状态。应尽可能使用结构化异常处理块来处理异常。若要使用此事件,必须在调用 Application.Run 之前附加一个处理程序。因为这是一个静态事件,所以释放应用程序时必须分离事件处理程序,否则会导致内存泄漏。

我们在Application.Run方法之前加上如下代码

  1. Application.ThreadException += (object sender, ThreadExceptionEventArgs e) =>  
  2.     {  
  3.         if (MessageBox.Show("系统检测到未知异常,是否退出""提示", MessageBoxButtons.YesNo) == DialogResult.Yes) Application.Exit();  
  4.     };  
  5. Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);  

 

再次运行如图:

提示:并不能捕获所有异常,未捕获异常可以使用AppDomain.CurrentDomain.UnhandledException事件,具体参阅MSDN:AppDomain.UnhandledException 事件

 

WFP中使用如下:

  1. protected override void OnStartup(StartupEventArgs e)  
  2. {  
  3.     Application.Current.DispatcherUnhandledException += (object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs de) =>  
  4.         {  
  5.             de.Handled = true;  
  6.             if (MessageBox.Show("系统检测到未知异常,是否退出""提示", MessageBoxButton.YesNo) == MessageBoxResult.Yes)  
  7.                 Application.Current.Shutdown();  
  8.         };  
  9.     base.OnStartup(e);  
  10. }  
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
异常处理之ThreadException、unhandledException及多线程异常处理
C#.NET
WPF之基础概念
Delphi Application Messagebox 参数详解及应用实例
messagebox
CodeEase.com ? Blog Archive ? Windows Form Application: Stopped Working Due to Problem Event Name
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服