加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 17:20:29 所属栏目:百科 来源:网络整理
导读:我已将初始化代码放在表单加载中,因为将它留在构造函数中并不是一个好主意,因为设计器可能会崩溃. 问题是我刚刚意识到表单加载事件中的任何异常都将在内部捕获! 为什么?我应该如何克服这个问题? private void Form1_Load(object sender,EventArgs e) { //
我已将初始化代码放在表单加载中,因为将它留在构造函数中并不是一个好主意,因为设计器可能会崩溃.

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

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

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();

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读