如何禁止所有.NET异常对话框?

时间:2012-11-10 09:50:50

标签: .net unhandled-exception background-thread

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

  1. 有没有办法完全禁止这样的对话框?
  2. 是否可以仅针对Background Thread
  3. 禁止显示对话框

3 个答案:

答案 0 :(得分:0)

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

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

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

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

答案 1 :(得分:0)

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

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

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

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

答案 2 :(得分:0)

偶然发现了这个问题,因为我的自动化测试被我要抑制的异常对话框阻止了。此问题标题优于此案例的任何类似stackoverflow问题,因此Google将此发送给我。然而,问题正文和答案更倾向于采用程序化方法。

鉴于帖子标题,提供一个解决问题而无需修改源代码的答案似乎是合理的。

最终,我可以通过将注册表中的DontShowUI密钥设置为1来禁止异常对话框。此修订以及一系列备选方案详细描述于:

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