理解异常是一定会发生的
n 大多数的软件系统都不是百分之百可靠的!
n 要站在异常一定可能会发生的角度来编写异常处理程序,应对程序有可能发生的错误。
n 建立一个良好的异常处理策略
处理未预料的异常
n 确保所有程序的入口都使用了try-catch
n 在catch中截获所有的异常
n 异常处理技术
n 记录异常
n 在文件中记录异常
n 在数据库中记录异常
n 在eventlog中记录异常
n 发送email通知异常
n 异常产生时,用友好(user-friendly)的方式通知用户
全局异常处理
Application.ThreadException 事件,只用在主线程中
在发生未捕获线程异常时发生,该事件使应用程序可以在从某窗口过程收到线程异常时智能地处理异常。将您的事件处理程序附加到 ThreadException 事件以处理该异常。适当的事件处理程序并不终止线程,并且允许应用程序继续执行。
工作线程(WorkerThreads)中的异常
n 编写多线程代码时,必须考虑在工作线程中出现的异常
n 在线程的入口使用try-catch
n 使用delgate或其他的方式将发生的异常通知给主线程
异常处理程序块
n Publisher/subscriber设计模式
n 编译工程
n 在新的工程中添加引用
n 引入名称空间Microdoft.ApplicationBlock.ExceptionManagement
n 使用ExceptionManager.Publish()来发布异常
n 配置app.config文件启用异常管理
n 在.config文件中配置一些信息可以添加自己的异常处理模块
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="exceptionManagement" type="Microsoft.ApplicationBlocks.ExceptionManagement.ExceptionManagerSectionHandler,Microsoft.ApplicationBlocks.ExceptionManagement" />
</configSections>
<exceptionManagement mode="on">
<publisher mode="on" assembly="Microsoft.ApplicationBlocks.ExceptionManagement"
type="Microsoft.ApplicationBlocks.ExceptionManagement.DefaultPublisher"
logname="Northwind Exceptions Log"
applicationname="Northwind Traders Orders" />
</exceptionManagement>
</configuration>