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

C# 为什么Form_Load事件已经捕获了所有异常?,c#,winforms,exception,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

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

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

为什么??我应该如何克服这一点

    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");
    }

这是一个bug,在这里解释如下:

在x64中,OnLoad异常消失的情况–用户模式回调异常

VS团队回答: 从这里开始:

由Microsoft@22/04/2010 17:12发布 你好,

此错误被关闭为“外部”,因为此行为是x64版本的Windows处理异常的结果。当用户模式异常跨越内核转换时,x64版本的Windows不允许该异常传播。因此,附加的调试程序不知道发生异常导致调试器未能中断未处理的异常

不幸的是,VisualStudio团队对此无能为力,这是操作系统设计的结果。有关此问题的所有反馈都应提交给Windows团队;然而,Windows团队认为这是“正确的”操作系统设计,并认为x86行为“不正确”

致以最良好的祝愿, Visual Studio调试器


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

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

     if (!MainForm.IsInDesigner)
          LoadControl();

是的,Im使用win 7 x64可能会重复,但解决方案配置为x86。有人能在x86系统上测试一下吗?你说得对。这是一个bug,这里有解释:如果你想检查你是否在设计器中执行,你可以只检查
LicenseManager.UsageMode
Componet.DesignMode
谢谢,我认为这两个检查都可以,但我的版本只需要一行代码。