gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 12:34:14 25 4
gpt4 key购买 nike

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

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

为什么?我应该如何克服它?

    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

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

关于c# - 为什么 Form_Load 事件已经捕获了所有异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7585786/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com