C#异常处理的一些经验和技巧
2023-06-13 09:15:20 时间
1、什么时候该异常处理?
1)代码最外层,如WinFrom,避免用户看到内部异常信息用户体验不好,或者造成程序崩溃。
2)遇到异常需要恢复状态或者重试的地方。例如连接数据库偶然失败了,可以有个重连机制,在Catch块重新连接数据库。
3)对于一系列有可能失败的任务,其中有一个任务失败,不想影响到其他任务。例如要上传100张图片,不想因为一张图片上传发生异常而失败,进而终止整个上传任务,仅需要记录下失败的图片,提醒用户重传即可。
2、异常处理需要注意的地方
1)Catch和Finally代码应该非常短,而且成功率极高,避免自己又抛出一个异常。否则CLR会终止进程,避免安全漏洞或者不可预知的后果。这个类似于Windows蓝屏,发生了严重的错误,宁愿使系统不可用。
2)Catch块尽量避免直接捕捉异常的基类Exception,而应该捕捉具体的异常类。
3、异常处理的方法和技巧
1)是否能构建统一的框架处理异常,而不用手工来处理呢?
有的人可能会问,能不能偷懒,在一个地方处理异常就行了。如果仅仅是记录异常系统信息,通知到用户,而且这些信息通常是可以缺少一些上下文的,是可以构建同一的机制记录异常信息的。
例如:
WinFrom的Application对象本身就提供了ThreadException时间来捕捉为处理的异常
staticvoidMain()
{
//注册捕捉异常事件
Application.ThreadException+=newSystem.Threading.ThreadExceptionEventHandler(Application_ThreadException);
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(newForm1());
}
staticvoidApplication_ThreadException(objectsender,System.Threading.ThreadExceptionEventArgse)
{
Exceptionex=e.Exception;
//做一些极其简单的记录异常信息操作
}
又例如:
WebFrom的Global.asax本身就已经定义了voidApplication_Error(objectsender,EventArgse)来处理异常
voidApplication_Error(objectsender,EventArgse)
{
//在出现未处理的错误时运行的代码
Exceptionex=Server.GetLastError();
//处理完异常后清除异常
Server.ClearError();
}
但是很多时候,异常处理,不仅仅只是记录到了错误信息就可以了,有时候是需要失败重试或者清理资源等等,因此,仅仅靠统一构建异常处理框架是不够灵活的,因此可以一方面统一处理,另外一方面特殊的地方可以另外处理。
相关文章
- C#TextBox密码框
- Linux运行c#_在控制台运行一个java程序
- c# 多线程并发-金三银四面试:C#.NET面试题高级篇2-多线程
- C#/.NET CLR:公共语言运行时
- C与Oracle数据库的安全关闭(c# oracle关闭)
- C#中使用快速排序按文件创建时间将文件排序的源码
- c#(Socket)同步套接字代码示例
- C#怎样才能实现窗体最小化到托盘呢?
- c#static的全部用法收集整理
- 常用正则常用的C#正则表达式
- C#使用正则表达式实例
- c#通过经纬度查询具体的地址和区域名称
- C#动画窗体(AnimateWindow)的小例子
- .NET(C#):Emit创建异常处理的方法
- C#调用Java类的实现方法
- C#javascript读写Cookie的方法
- C#匿名委托和Java匿名局部内部类使用方法示例
- C#中TransactionScope的使用小结
- c#利用system.net发送html格式邮件
- 使用C#的aforge类库识别验证码实例