1

在调试模式下运行我们的单元测试时,Visual Studio 调试器会在某个点中断以显示可重入 MDA。链接的文章解释说,当低级操作系统扩展点(例如向量异常处理程序)回调托管应用程序代码时,就会发生这种情况。

显然这会导致堆损坏或其他严重问题,所以我肯定想修复它。

我正在查看显示此警告的位置的堆栈跟踪,但我无法确定此处涉及哪个“低级操作系统扩展点”。除了一次由 mstest 和调用System.Windows.Forms.Cursors.VSplitgetter 引起的转换之外,我没有看到任何非托管/托管转换。此外,仅从单元测试中调用该 getter 似乎不足以触发警告。

我在这里做错了什么,我该如何解决?

4

1 回答 1

2

正如Hans Passan所建议的那样(尽管不幸的是他现在在这里删除了他的答案),问题是在我的单元测试中我调用的代码只设计用于在带有消息循环的 GUI 线程的上下文中调用。单元测试中没有这样的消息循环。

在这种情况下,问题是System.Windows.Forms.Cursors.VSplit吸气剂。我看到了两种避免这种情况的方法:

  • 严格遵循 MVVM 模式,将有问题的代码单独放在视图中,只测试视图模型。
  • 或将光标管理代码隐藏在单元测试中模拟的接口后面
于 2010-07-09T12:33:14.750 回答