代码之家  ›  专栏  ›  技术社区  ›  jhunter

WinForms以“未处理的异常”自动退出

  •  3
  • jhunter  · 技术社区  · 15 年前

    程序吐出其中一个框,表示发生了未处理的异常,应用程序必须退出。我能解决这个问题的唯一线索是在事件日志中:

    事件类型:错误 事件源:.NET Runtime 2.0错误报告 事件类别:无 事件ID:5000 日期:1/9/2009 时间:上午8:47:44 用户:N/A 计算机:Dadiehl 描述: 事件类型clr20r3,p1 crm.client.exe,p2 1.0.1.0,p3 49667f61,p4 mscorlib,p5 2.0.0.0,p6 471ebc5b,p7 c35,p8 59,p9 system.formatexception,p10 nil。

    所以我在program.cs中添加了以下代码:

    try
    {
        Application.Run(new WindowContainer());
    }
    catch (Exception exc)
    {
        new DialogException(exc).ShowDialog();
    }
    

    这样我就可以捕捉到任何异常,但用户仍然收到同样的消息,即应用程序必须退出。我不能在我的计算机上重现这个过程,因此不能使用调试器缩小它的范围。有人知道收集更多信息的方法吗?有人知道问题是什么吗?

    2 回复  |  直到 15 年前
        1
  •  15
  •   Jon Skeet    15 年前

    很可能是在另一个线程上引发了异常。

    您可能希望将处理程序添加到以下两个事件:

    添加记录异常的处理程序,您将获得更多信息。

    非UI线程中未处理异常的行为从.NET 1.1更改为2.0。他们以前只是被吞下,但现在他们停止了应用程序。如果你想的话,有一个app.config标志可以用来选择旧的行为——但这并不是真正推荐的,因为另一个线程中的异常可能意味着你的应用现在不稳定。我现在记不起设置的细节,但如果你想的话,我可以查一下。

        2
  •  0
  •   Lurker Indeed    15 年前

    如果您不想马上对代码进行更改,我可能会将windbg与sos扩展一起使用,这样您至少可以获得一个堆栈跟踪-对于这些类型的崩溃非常方便。

    Real World Walkthrough w/WinDbg

    您可以尝试处理未处理的异常事件。来自MSDN:

    UnhandledExceptionEvent