解释 Visual Studio 2010 及更高版本、WinForms 和 WPF 中的严重错误

2023-11-24

尝试将以下代码放入其中LoadWinForms 的事件处理程序或Loaded对于 WPF。

Dim doc As New XmlDocument
Dim nsmgr As New XmlNamespaceManager(Nothing) 'this line throws an exception

问题是没有抛出异常,并且发生了堆栈损坏。它可能有不同的副作用,具体取决于 IDE - 见下文。

  • 受影响的 IDE 包括:2008、2010 和 2012(我可以测试的)。 2010 重置堆栈状态,并从子/处理程序返回,就像什么都没发生一样(但没有继续执行其他语句)。 2012 可能会警告用户有关失败的应用程序和尝试运行的情况compatibility mode。此后下次它的运行方式与 2010 相同。2008 会正确抛出异常,但仅限于默认配置(AnyCPU)。将平台目标切换到 x86 也会使问题在 2008 年再次出现。
  • 受影响的框架是 WinForms 和 WPF。控制台应用程序和 ASP.NET 似乎工作正常。 .NET v2.0-4.5。
  • 受影响范围仅Load事件到目前为止。 将此代码放入按钮即可使其工作。
  • 受影响的构建 配置=任意。默认情况下尝试过Debug and Release.

为什么我认为它是一个错误,因为它会使对象处于不稳定状态 - 它们没有完成初始化,这不是预期的行为。重要的是没有人会知道它发生了,因为它不会抛出异常。根据您的设计,您最终可能会在数据库中得到不正确的数据,这在最坏的情况下可能会导致严重的后果。

有谁能很好地解释为什么会发生这种情况以及是否有解决方法?


该问题是由 wow64 模拟层引起的,当您在 x64 操作系统上定位 x86 平台时,该模拟层就会发挥作用。
它吞掉负责触发 Load 事件的代码中的异常。
因此,调试器看不到异常,也无法介入处理这种情况。
这篇文章似乎记录了那么那里发生了什么,

之前的这个回答汉斯·帕桑特(Hans Passant)(所有的功劳和赞成票都归于他)解释了可能的解决方法。
我最喜欢的一个是将所有内容移出 Form_Load 事件并将有问题的代码放入表单构造函数中。 (当然不知道是否适用于你的情况)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

解释 Visual Studio 2010 及更高版本、WinForms 和 WPF 中的严重错误 的相关文章

随机推荐

  • 将当前日期增加 5 天

    date date Y m d current time timestamp 0 我该如何改变 date to date 5 days PHP 版本是 5 2 此代码不起作用 date cur date Y m d current time
  • 为什么 std::apply 使用通用函数会失败?

    取自参考参数 为什么调用std apply add generic 编译失败 有办法解决吗 include
  • 如何正确卸载 C++ Shell 扩展 DLL

    I have shell 扩展 dll用 C 和 COM 编写 dll 被注册并加载到内存中 我的升级设置程序将执行以下操作 注销shell扩展dll 杀死explorer exe 复制更高版本的 shell 扩展 dll 步骤 2 启动e
  • 如何设置默认 Elixir 混合任务

    如果我有一个mix exs文件类似 defmodule Mix Tasks My task do use Mix Task shortdoc Perform my task def run do IO puts Working end en
  • Android:检测导航栏可见性

    如何检测导航栏的存在并将其隐藏 In my onCreate I call hideNavigationBar 方法来隐藏导航栏 然后我注册一个侦听器 以便在用户触摸屏幕上的任何位置时每次导航栏变得可见时隐藏导航栏 如文档 当导航栏在触摸事
  • javascript排序函数排序错误[重复]

    这个问题在这里已经有答案了 你好 我有一个文本框 其值如下
  • 如何在http标头中设置用户代理

    我正在尝试在 C 中的重写函数 GetWebRequest 中的 http 标头中设置用户代理 protected override System Net WebRequest GetWebRequest Uri uri System Ne
  • `git push origin`的结果是什么?

    我在我的本地功能分支 foo 上工作 然后我想将这个新分支推送到原点 以便其他人可以对其进行处理 执行此操作的正常方法是 git push origin foo foo 我最终做到了 它完全按照预期工作 推起了 61 个物体 在此之前 我一
  • 抓取“元素周期表”和所有链接的维基页面

    我想抓取以下维基文章 http en wikipedia org wiki Periodic table 这样我的 R 代码的输出将是一个包含以下列的表格 化学元素简称 化学元素全名 化学元素维基页面的 URL 显然 每个化学元素都有一行
  • Django:“模块”对象没有属性“索引”

    过去几天我一直在尝试学习 Django 但最近我偶然发现了一个我似乎无法解决的问题 在完成 Django 自己的关于编写第一个应用程序的教程后 我决定再次阅读它 直到现在 我才会替换所有内容 以满足我正在构建的原始应用程序的要求 所以 一切
  • spring-boot 应用程序的嵌入式 Tomcat 目录列表

    我有一个带有嵌入式 Tomcat 的 Spring Boot 应用程序 我想通过 tomcat 目录列表从不同位置公开一些图像文件和文件夹 所以我在我的配置文件中添加了以下内容 public class AppConfig extends
  • 在 iOS 设备上运行网络服务器

    我想创建一个可以在其他 iOS 设备之间共享文件的应用程序 也可以在桌面计算机之间共享文件 所以我想做的是在我的设备上运行一个轻量级 Web 服务器 允许从设备下载文件 如下所示 http myphone local 1234 folder
  • 如何在 C# 中证明方法永远不会返回 null(按合同设计)

    我有一个永远不会返回空对象的方法 我想澄清一下 这样我的 API 的用户就不必编写如下代码 if Getxyz null do stuff 我该如何表达这个意图 不幸的是 没有办法内置到 C 中 您可以记录这一事实 但这不会被自动检查 如果
  • 桌面版 flutter,Visual Studio 2022 问题

    当我尝试在 Windows 上运行 flutter 应用程序时收到此消息 Building Windows application CMake Error at CMakeLists txt 2 project Generator Visu
  • Couchdb数据库-每用户设计文档管理

    我正在评估 Couchdb 作为一个有很多用户的 Web 应用程序 如果我使用每用户数据库模型 想必每个数据库中的设计文档都是相同的 我没有发现任何提及作用于多个数据库的 全局 设计文档 或任何可以轻松更改所有用户数据库的设计文档的工具 这
  • 在 C 中创建数组

    我正在尝试用 C 创建一个 UNIX shell 如果是用 Java 那将是小菜一碟 但我对 C 没有那么丰富的经验 C 中的数组让我有点困惑 我不确定如何声明或访问某些数据结构 我想创建一个字符串来在每一行中读取 很简单 只是一个字符数组
  • 自定义按键绑定 Xcode 4?

    不久前我问了一个问题Xcode 中的自定义键绑定 我最终重新创建了一些TextMate 的按键命令在 Xcode 中 刚刚更新到 Xcode 4 PBKeyBinding 文件似乎不再有任何作用 自定义键绑定 特别是 Xcode 4 的新热
  • Windows Server 2012 中的 AWS EFS [已关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 有人曾经让 Windows Server 使用 Windows NFS 4 1 客户端连接到 AWS EFS 卷吗 我知道它不受支持 但想知道是否有人做过 或通过其他客户端或实用程序
  • 从另一个类调用类方法

    有没有办法从另一个类调用一个类的方法 我正在寻找类似 PHP 的东西call user func array 这是我想要发生的事情 class A def method1 arg1 arg2 class B A method1 1 2 更新
  • 解释 Visual Studio 2010 及更高版本、WinForms 和 WPF 中的严重错误

    尝试将以下代码放入其中LoadWinForms 的事件处理程序或Loaded对于 WPF Dim doc As New XmlDocument Dim nsmgr As New XmlNamespaceManager Nothing thi