Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 沉默的例外,_C#_Exception Handling_64 Bit - Fatal编程技术网

C# 沉默的例外,

C# 沉默的例外,,c#,exception-handling,64-bit,C#,Exception Handling,64 Bit,我在64位中遇到了这种奇怪的静默异常问题。 这是什么原因造成的? 我想了解为什么会出现这种情况,建议的解决方案是什么 大体上: try { Application.Run(new Form1()); } catch (Exception ex) { MessageBox.Show("Error"); } private void Form1_Load(object sender, Even

我在64位中遇到了这种奇怪的静默异常问题。 这是什么原因造成的? 我想了解为什么会出现这种情况,建议的解决方案是什么

大体上:

    try
    {
        Application.Run(new Form1());
    }
    catch
        (Exception ex)
    {
        MessageBox.Show("Error");
    }

private void Form1_Load(object sender, EventArgs e)
{
    throw new Exception("oh no!");
}

为了加载表单,您的代码将调用一个内核函数来创建表单的窗口,而这个内核函数将通过发送一条调用
OnLoad
方法的消息来调用您的代码。如果您在该方法中抛出异常,异常处理机制将引导调用堆栈返回内核模式边界

在x86上,异常可以通过此边界返回到原始调用方。在x64上,它在到达边界时停止,无法继续。在XP64和Vista中,异常被吞没(忽略),而带有声明与Win7兼容的清单的64位应用程序将在发生这种情况时崩溃。要获取其他操作系统或64位Win7上32位应用程序的崩溃行为,请参阅


对于在x64上作为内核模式回调调用的任何事件处理程序,都会发生这种行为。

不幸的是,Visual Studo团队对此无能为力,这是操作系统设计的结果。有关此问题的所有反馈都应提交给Windows团队;然而,Windows团队认为这是“正确”的操作系统设计,并认为x86的行为“不正确”
Haha。不错的微软。请就此联系其他团队,但他们不会修复它,因为他们认为第三个团队错误地实现了它。实际上,第二篇文章对问题和解决方案都进行了非常好和深入的解释。显然有一个修补程序(在您提供的链接中链接到).user271077:很复杂:)阅读页面顶部的第一个链接了解所有详细信息