To handle Unhandled Exception

 

为了捕捉那些我们没有try{…}catch{…}到的异常(Unhandled Exception),且有一个UI给用户予以友好的提示,我们需要一个机制去处理这些异常。而且,如果我们在任何可能发生异常的地方都使用try{…}catch{…}的话,那将是费力不讨好的事情。

.Net为我们提供了一些机制来处理Unhandled Exception

ASP.Net & Web Services

请看这里的详细内容

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

Windows Forms & Console

MSDN上说使用The UnhandledExceptionEventHandler Delegate,但是我在实际使用中发现它并不好使。

我的代码如下:


None.gif         [STAThread]
None.gif        
private   static   void  Main( string [] args)
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif {
InBlock.gif            
//Error Handle
InBlock.gif
            AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
InBlock.gif
InBlock.gif            Application.Run(
new MainForm());
InBlock.gif            
ExpandedBlockEnd.gif        }

None.gif
private   static   void  CurrentDomain_UnhandledException( object  sender, UnhandledExceptionEventArgs e)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
//Show a UI to user… 比如:
InBlock.gif
    MessageBox.Show(“error …”);
ExpandedBlockEnd.gif}

None.gif

此代码在 Debug 模式下还算幸运(在点击了弹出的 MessageBox OK 按钮后, Application 结束了),但是在 Release 模式下根本不起作用——弹出那个令人害怕的 JIT Debugging 的对话框。对此,我们可以看看 CLR Exceptions PM的解释 。后来使用了如下代码:
None.gif Application.ThreadException  +=   new  ThreadExceptionEventHandler(Application_ThreadException);
None.gif
private   static   void  Application_ThreadException( object  sender, ThreadExceptionEventArgs e)
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
//
ExpandedBlockEnd.gif
}

None.gif

 

测试后发现正确捕捉到了那些Unhandled Exception。不过,要注意的是:使用此方法只能捕捉到主线程上发生的异常。

 

Reference

User Friendly Exception Handling

Managing Unhandled Exceptions in .NET

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值