根据我的经验,应用程序unhandled exception
中的 an.NET
可能会导致显示描述异常等的对话框。
- 有没有办法完全抑制这样的对话框?
- 是否可以仅针对 a 抑制对话框
Background Thread
?
根据我的经验,应用程序unhandled exception
中的 an.NET
可能会导致显示描述异常等的对话框。
Background Thread
?是的,这是可能的,但您必须认真考虑这对您的应用程序意味着什么。
如果发生未处理的异常,您的应用程序可能处于意外/未定义状态,让应用程序崩溃可能更有意义 - 替代方案可能是不一致或冻结 UI,甚至更糟。
话虽如此,您并没有说明您使用的是 WPF、WinForms、控制台应用程序还是 ASP .NET 或其他东西。您需要告诉我们您正在使用的技术;但总的来说,您应该能够连接一个全局异常处理程序,它只是抑制异常。
对于后台线程部分,您可以简单地将线程函数包装在 try catch 块中。
未处理的异常实际上会终止您的进程。如何呈现给用户取决于 Windows。例如,如果您安装了调试器,您会看到一个允许您调试进程的对话框。这不是您在应用程序中控制的东西。
但是,如果您的应用程序是 Windows 窗体应用程序,.NET 框架将为未处理的异常设置一个处理程序,该处理程序将打开一个对话框,其中包含有关异常的一些信息,然后允许您的进程继续。我假设这是您所指的对话框。
为了避免这种行为,最好的方法是通过使用 try-catch 块来实际捕获和处理异常。当然,捕获然后完全忽略异常通常是一个坏主意,并且可能会隐藏应用程序中的错误。
您可以自定义 Windows 窗体如何处理您没有使用该 Application.SetUnhandledExceptionMode
方法捕获的异常。
偶然发现了这个问题,因为我有自动化测试被我想抑制的异常对话框阻止。这个问题的标题优于任何类似的stackoverflow问题,所以谷歌把我发到这里。但是,问题主体和答案更倾向于程序化方法。
鉴于帖子标题,在不修改源代码的情况下提供解决问题的答案似乎是合理的。
最终,我能够通过将DontShowUI
注册表中的键设置为1
. 此修复程序以及一系列替代方案在以下内容中有详细描述: