.NET异常处理注意点

.NET异常处理注意点

抛出异常的时机:

在设计一个函数的时候,应该使用代码尽可能的避免已知的异常,比如:空值,除零等。但是如果遇到了未知异常并且使用函数的返回值不足以表达遇到的异常的时候,应该抛出这个异常,有必要的时候应该设计自己的异常类,使用InnerException表达遇到的未知异常。

追记,由于函数都有可能抛出异常,所以,在添加函数注释的时候,应该使用<exception cref="Exception"></exception>来标记。使用函数的时候,查看注释可以看到该标记,来避免已知异常。

理未常:

确保所有的程序入口都使用了try-catch

catch中截所有的异常,并进行处理。对异常进行处理的方式有:

1.记录异常

在文件中记录异常

在数据记录异常

Eventlog记录异常

2.E-mail来通知异常

3.异常时候,用友好(user-friendly)的方式通知用

 

捕获UI线程中的未处理异常:添加一个全局异常理函

们虽然没有在所有的用程序入口写捕异常的try-catch,但是使用Application象中的ThreadException属性可以置一个delegate来捕所有未理的Main UI线程中出的异这种方式只能理主线程当中的异常,其他工作线程、线程在异常不到的

 

捕获工作线程(Worker Threads)中的未处理异常

写多线程代码时,必在工作线程中出的异常线程的入口使用try-catch捕获工作线程中产生的未处理异常,然后,在Catch使用delegate或其他的方式将生的异常通知线

Private void ThreadProcessCB()

{

           Try

{

}

Catch(exception ee)

{

          This.BeginInvoke(new WorkerThreadExceptionHandlerDelegate(WorkerThreadExceptionHandler), new  object[]{ee});

}

}

 

 

 

异常理的最好方

不要:

Catch异常并re-throw重新抛出一个新的异常,会失一些消息,例如会个异常中有的一些用堆的信息。

抛出异常来控制代行。

在程序的构造函数入口添加try-catch方法/属性/构造

MessageBox.Show(MyException.ToString())

使用了try-catch但是并没有理异常,这样就隐藏了该异常,不利于发现问题,可能使程序进入未知的处理分支。

 

需要:

从始至紧记异常理的策略

抛出具体的一个异常,而不是只抛出Exception型的异常。这样能方面我获对应类型的异常

用程序所有的入口使用try-catch:事件理函数,主函数,线程入口

在代码中处理所有意料到的异常

写代码时要注意考用程序最差的情况

示有好的信息,并提供适当的管理员联系信息

在可能的情况下提供可能的选择止,重,忽略

 

 

异常理程序

Publisher/subscriber设计模式

异常理程序

http://www.microsoft.com/downloads/details.aspx?FamilyID=8ca8eb6e-6f4a-43df-adeb-8f22ca173e02&DisplayLang=en

编译工程

在新的工程中添加引用

引入名称空Microsoft.ApplicationBlock.ExceptionManagement

使用ExceptionManager.Publish()布异常

配置app.config文件启用异常管理,使其出现异常的时候在系统日志中添加一条记录。

.config文件中配置一些信息可以添加自己的异常理模

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值