【问题标题】:Why Form_Load event already catches all the Exceptions?为什么 Form_Load 事件已经捕获了所有的异常?
【发布时间】:2011-11-26 23:58:36
【问题描述】:

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

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

为什么?我该如何克服呢?

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

【问题讨论】:

标签: c# winforms exception


【解决方案1】:

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

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

【讨论】:

  • 如果你想检查你是否在设计器中执行你可以检查LicenseManager.UsageModeComponet.DesignModestackoverflow.com/a/2427444/80274
  • 谢谢,我认为这两项检查都可以,但我的版本只需要代码行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-18
  • 2017-06-19
  • 2011-12-14
  • 2023-03-15
  • 1970-01-01
  • 2011-11-28
相关资源
最近更新 更多