加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 抓住所有例外并做……什么都没有?

发布时间:2020-12-15 19:55:51 所属栏目:百科 来源:网络整理
导读:我刚刚继承了有超过300个代码的代码: catch(Exception ex){ string s = ex.Message ;} 下次我遇到写这篇文章的人时,我该怎么办呢? 不过实话说… 这显然是编码恐怖,是程序员可以做的最糟糕的事情之一.我是否应该通过并删除所有这些并查看运行应用程序时的真
我刚刚继承了有超过300个代码的代码:

catch(Exception ex)
{
    string s = ex.Message ;
}

下次我遇到写这篇文章的人时,我该怎么办呢?

不过实话说…

这显然是编码恐怖,是程序员可以做的最糟糕的事情之一.我是否应该通过并删除所有这些并查看运行应用程序时的真实情况?你怎么会纠正这个错误?

这是一个WinForms应用程序,由我的组织内部运行约24个用户.

解决方法

您可以删除所有这些catch块,并在启动第一个表单之前添加以下代码:

public static void Main(string[] args)
{
// Event handler for handling UI thread exceptions.
Application.ThreadException += 
    new ThreadExceptionEventHandler(App_UiThreadException);

// Force all Windows Forms errors to go through our handler.
// NB In .NET 4,this doesn't apply when the process state is corrupted.
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);

// Event handler for handling non-UI thread exceptions. 
AppDomain.CurrentDomain.UnhandledException += new 
    UnhandledExceptionEventHandler(App_NonUiThreadException);

// Run the application.
}

拦截所有事件

调用SetUnhandledExceptionMode可确保无论应用程序配置设置如何,都将拦截所有未处理的异常.

请注意,从.NET Framework 4开始,上面编码和下面讨论的事件不会针对损坏进程状态的异常(例如堆栈溢出或访问冲突)引发 – 除非事件处理程序是安全关键的且具有HandleProcessCorruptedStateExceptionsAttribute属性.

exceptions that corrupt process state有一个有趣的博客文章.

UI线程异常

处理Application.ThreadException事件会拦截ui线程上未处理的异常.在您的过滤器代码中,您可以记录每个异常.如果要复制ui线程异常的现有行为,您应该能够吞下大部分内容.

非UI线程异常

处理AppDomain.UnhandledException事件会截获非ui线程上的未处理异常.在您的过滤器代码中,您可以记录每个异常.不幸的是,大多数非ui线程异常在触发此事件时已经是致命的,因此不可能通过执行此操作来复制非ui线程异常的现有行为.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读