源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

C#异常处理的一些经验和技巧

  • 时间:2020-07-06 08:40 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:C#异常处理的一些经验和技巧
[b]1、什么时候该异常处理? [/b]1)代码最外层,如WinFrom,避免用户看到内部异常信息用户体验不好,或者造成程序崩溃。 2)遇到异常需要恢复状态或者重试的地方。例如连接数据库偶然失败了,可以有个重连机制,在Catch块重新连接数据库。 3)对于一系列有可能失败的任务,其中有一个任务失败,不想影响到其他任务。例如要上传100张图片,不想因为一张图片上传发生异常而失败,进而终止整个上传任务,仅需要记录下失败的图片,提醒用户重传即可。 [b]2、异常处理需要注意的地方[/b] 1)Catch和Finally代码应该非常短,而且成功率极高,避免自己又抛出一个异常。否则CLR会终止进程,避免安全漏洞或者不可预知的后果。这个类似于Windows蓝屏,发生了严重的错误,宁愿使系统不可用。 2)Catch块尽量避免直接捕捉异常的基类Exception,而应该捕捉具体的异常类。 [b]3、异常处理的方法和技巧[/b] 1)是否能构建统一的框架处理异常,而不用手工来处理呢? 有的人可能会问,能不能偷懒,在一个地方处理异常就行了。如果仅仅是记录异常系统信息,通知到用户,而且这些信息通常是可以缺少一些上下文的,是可以构建同一的机制记录异常信息的。 例如: WinFrom的Application对象本身就提供了ThreadException时间来捕捉为处理的异常
[u]复制代码[/u] 代码如下:
static void Main()     {       //注册捕捉异常事件       Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);       Application.EnableVisualStyles();       Application.SetCompatibleTextRenderingDefault(false);       Application.Run(new Form1());     }     static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)     {       Exception ex = e.Exception;       //做一些极其简单的记录异常信息操作     }
又例如: WebFrom的Global.asax本身就已经定义了void Application_Error(object sender, EventArgs e) 来处理异常
[u]复制代码[/u] 代码如下:
void Application_Error(object sender, EventArgs e)     {       // 在出现未处理的错误时运行的代码       Exception ex = Server.GetLastError();       //处理完异常后清除异常       Server.ClearError();     }
但是很多时候,异常处理,不仅仅只是记录到了错误信息就可以了,有时候是需要失败重试或者清理资源等等,因此,仅仅靠统一构建异常处理框架是不够灵活的,因此可以一方面统一处理,另外一方面特殊的地方可以另外处理。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部