为什么Form_Load事件已经捕获了所有异常?

时间:2011-09-28 15:40:33

标签: c# winforms exception

我已将初始化代码放在表单加载中,因为将它留在构造函数中并不是一个好主意,因为设计器可能会崩溃。

问题是我刚刚意识到表单加载事件中的任何异常都将在内部捕获

为什么呢?我该如何克服这个问题?

    private void Form1_Load(object sender, EventArgs e)
    {
        //This exception will be catch internally (I don't know why and where)
        throw new Exception("test");
    }

1 个答案:

答案 0 :(得分:2)

这是一个错误,在此解释:

消失的OnLoad异常 - x64中的用户模式回调异常

http://blog.paulbetts.org/index.php/2010/07/20/the-case-of-the-disappearing-onload-exception-user-mode-callback-exceptions-in-x64/

VS团队回答: 从这里开始:https://connect.microsoft.com/VisualStudio/feedback/details/357311/silent-exceptions-on-x64-development-machines

发布者:微软@ 22/04/2010 17:12 您好,

此错误已关闭为“外部”,因为此行为是由x64版本的Windows处理异常引起的。当用户模式异常穿过内核转换时,x64版本的Windows不允许异常传播。因此,附加的调试器不会意识到发生了异常这一事实导致调试器未能在未处理的异常中中断。

不幸的是,Visual Studio团队无法解决这个问题,这是操作系统设计的结果。有关此问题的所有反馈都应提交给Windows团队;但Windows团队认为这是“正确的”操作系统设计,并认为x86行为“不正确”。

最诚挚的问候, Visual Studio调试器


我使用的解决方案: 我把表单加载中的代码放到构造函数中,然后检查应用程序是否在设计器中运行

    protected static bool IsInDesigner
    {
        get { return (Assembly.GetEntryAssembly() == null); }
    }

     if (!MainForm.IsInDesigner)
          LoadControl();