gpt4 book ai didi

c# - 捕获所有异常并...什么都不做?

转载 作者:行者123 更新时间:2023-11-30 13:10:03 25 4
gpt4 key购买 nike

我刚刚继承的代码出现了 300 多次:

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

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

但是说真的...

这显然是一种编码恐怖,也是程序员能做的最糟糕的事情之一。我是否应该通过并删除所有这些并在运行该应用程序时看看事情到底有多糟糕?您将如何纠正这个错误?

这是一个 WinForms 应用程序,由大约 2 打用户在我的组织内部运行。

最佳答案

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

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 线程异常的现有行为。

关于c# - 捕获所有异常并...什么都不做?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5158299/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com