disconnectedContext MDA

注释

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

disconnectedContext当 CLR 尝试在处理与 COM 对象相关的请求时转换为断开连接的公寓或上下文时,将激活托管调试助手(MDA)。

症状

运行时可调用包装器 (RCW)进行的调用将传递到当前单元或上下文中的基础 COM 组件,而不是它们所在的组件。 如果 COM 组件不是多线程组件,这可能会导致损坏和数据丢失,就像单线程单元 (STA) 组件一样。 或者,如果 RCW 本身是代理,则调用可能会导致引发 COMException HRESULT 为 RPC_E_WRONG_THREAD。

原因

CLR 尝试转换到该单元或上下文时,OLE 单元或上下文已关闭。 这通常是由 STA 单元在单元拥有的所有 COM 组件完全释放之前关闭造成的。这可能是由于 RCW 上的用户代码的显式调用,或者 CLR 本身正在操作 COM 组件,例如,当 CLR 在回收关联的 RCW 时释放 COM 组件时。

解决方案

若要避免此问题,请确保拥有 STA 的线程在应用程序完成单元中所有对象之前不会终止。 这同样适用于上下文;确保在应用程序完全完成与上下文中的任何 COM 组件一起完成之前,不会关闭上下文。

对运行时的影响

此 MDA 对 CLR 没有影响。 它仅报告有关断开连接上下文的数据。

输出

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

配置

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

另见