disconnectedContext MDA

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

症状

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

原因

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

解决方法

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

对运行时的影响

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

Output

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

配置

<mdaConfig>
  <assistants>
    <disconnectedContext enable="false" />
  </assistants>
</mdaConfig>

请参见

参考

MarshalAsAttribute

概念

使用托管调试助手诊断错误

互操作封送处理

其他资源

互操作性