disconnectedContext MDA

注意

本文特定于 .NET Framework。 它不适用于 .NET 的较新版本实现,包括 .NET 6 及更高版本。

如果 CLR 在处理关于 COM 对象的请求时尝试转换到断开连接的单元或上下文,将激活 disconnectedContext 托管调试助手 (MDA)。

症状

将对运行时可调通包装器 (RCW) 的调用发送到当前单元或上下文中的基础 COM 组件,而不是发送到调用所在的 COM 组件。 如果该 COM 组件不是多线程的(例如,在单线程单元 (STA) 组件的情况中),则将导致损坏或数据丢失。 或者,如果 RCW 本身是一个代理,则该调用可能会引发 HRESULT 为 RPC_E_WRONG_THREAD 的 COMException

原因

当 CLR 尝试转换为 OLE 单元或上下文时,OLE 单元或上下文已关闭。 最常见的原因是:在 STA 单元拥有的所有 COM 组件完全释放之前,STA 单元已经关闭。在用户代码对 RCW 进行显式调用时或在 CLR 自行操作 COM 组件时(例如,在对关联的 RCW 进行了垃圾回收后,CLR 释放 COM 组件),可能会发生这种情况。

解决方法

若要避免发生此问题,请确保在应用程序处理完单元中存在的所有对象之前,拥有 STA 的线程不会终止。 这也同样适用于上下文;请确保在应用程序处理完上下文中存在的所有 COM 组件之前,上下文不会关闭。

对运行时的影响

此 MDA 对 CLR 无任何影响。 它只报告有关断开连接的上下文的数据。

输出

报告断开连接的单元或上下文的上下文 Cookie。

Configuration

<mdaConfig>
  <assistants>
    <disconnectedContext />
  </assistants>
</mdaConfig>

请参阅