1

根据我的经验,应用程序unhandled exception中的 an.NET可能会导致显示描述异常等的对话框。

  1. 有没有办法完全抑制这样的对话框?
  2. 是否可以仅针对 a 抑制对话框Background Thread
4

3 回答 3

0

是的,这是可能的,但您必须认真考虑这对您的应用程序意味着什么。

如果发生未处理的异常,您的应用程序可能处于意外/未定义状态,让应用程序崩溃可能更有意义 - 替代方案可能是不一致或冻结 UI,甚至更糟。

话虽如此,您并没有说明您使用的是 WPF、WinForms、控制台应用程序还是 ASP .NET 或其他东西。您需要告诉我们您正在使用的技术;但总的来说,您应该能够连接一个全局异常处理程序,它只是抑制异常。

对于后台线程部分,您可以简单地将线程函数包装在 try catch 块中。

于 2012-11-10T10:00:34.167 回答
0

未处理的异常实际上会终止您的进程。如何呈现给用户取决于 Windows。例如,如果您安装了调试器,您会看到一个允许您调试进程的对话框。这不是您在应用程序中控制的东西。

但是,如果您的应用程序是 Windows 窗体应用程序,.NET 框架将为未处理的异常设置一个处理程序,该处理程序将打开一个对话框,其中包含有关异常的一些信息,然后允许您的进程继续。我假设这是您所指的对话框。

为了避免这种行为,最好的方法是通过使用 try-catch 块来实际捕获和处理异常。当然,捕获然后完全忽略异常通常是一个坏主意,并且可能会隐藏应用程序中的错误。

您可以自定义 Windows 窗体如何处理您没有使用该 Application.SetUnhandledExceptionMode方法捕获的异常。

于 2012-11-10T10:05:49.773 回答
0

偶然发现了这个问题,因为我有自动化测试被我想抑制的异常对话框阻止。这个问题的标题优于任何类似的stackoverflow问题,所以谷歌把我发到这里。但是,问题主体和答案更倾向于程序化方法。

鉴于帖子标题,在不修改源代码的情况下提供解决问题的答案似乎是合理的。

最终,我能够通过将DontShowUI注册表中的键设置为1. 此修复程序以及一系列替代方案在以下内容中有详细描述:

https://stackoverflow.com/a/3637710/195755

于 2016-08-17T14:59:04.367 回答