微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

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

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

解决方法

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

消失的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();

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐