【问题标题】:Getting Windows error reporting dialog获取 Windows 错误报告对话框
【发布时间】:2011-02-07 11:30:34
【问题描述】:

在我的 C# 应用程序中,即使我处理异常:

Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
AppDomain.CurrentDomain.UnhandledException +=
    new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);

然后在处理程序中显示对话框并执行 Application.Exit 仍然收到带有发送的 Windows 错误报告对话框,不要发送...

如何防止弹出windows报错对话框?


事实上,如果异常是从主窗体构造函数中抛出的,那么程序会以 Windows 错误报告 dlg 结束。否则,如果来自 UI 线程的某个其他位置,则符合预期。

【问题讨论】:

    标签: c# exception unhandled


    【解决方案1】:

    您需要自行终止应用。这样就可以了:

    static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) {
      var ex = e.ExceptionObject as Exception;
      MessageBox.Show(ex.ToString());
      if (!System.Diagnostics.Debugger.IsAttached)
        Environment.Exit(System.Runtime.InteropServices.Marshal.GetHRForException(ex));
    }
    

    【讨论】:

      【解决方案2】:

      提供选择是否向 Microsoft 发送错误报告的对话框超出了例外情况。如果您使用不安全{} 块或使用执行某些非法操作的 p/invoke 块,则可能会发生这种情况。

      【讨论】:

      • ...它们也可能是由未处理的异常引起的。
      • 没有 p/invokes 也没有 unsafe{} 块,我简化为构造函数中带有 nullreferenceexception 的简单应用程序。所有未处理的异常最后都会导致错误报告对话框,即使自己抛出异常然后在提到的块中捕获也会导致相同的结果。使用 vs2008
      【解决方案3】:

      我认为您不应该与问题的症状作斗争。一开始就不应该发生未处理的异常。

      你有什么线索可以说明是什么原因造成的吗?

      【讨论】:

      • -1。虽然,是的,他应该捕获他知道的异常,但为了记录日志或自定义错误消息,捕获所有未处理的异常是非常标准的做法,然后尽可能优雅地退出。
      • @Adam:啊,当然,我想我误解了这个问题。关于优雅的退出,你是对的。抱歉,这是漫长的一天;-)
      • 这个程序很复杂,最初不是我自己开发的。我需要放置类似的东西来查看未处理的快速解决方案。但是,不想要类似于可怕的 windows 报告消息框的工件。我只需要我自己的漂亮、信息丰富的消息框。
      猜你喜欢
      • 2010-10-17
      • 1970-01-01
      • 2021-10-14
      • 2012-02-07
      • 2015-08-03
      • 2012-07-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多