disconnectedContext

本文介绍了在.NET Framework中,当CLR尝试访问已断开连接的COM对象上下文时,如何通过托管调试助手(MDA)来诊断并解决问题。文章详细解释了问题的症状、原因及解决方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

.NET Framework 开发人员指南
disconnectedContext MDA

更新:2007 年 11 月

如果 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 无任何影响。它只报告有关断开的上下文的数据。

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

<mdaConfig>
  <assistants>
    <disconnectedContext enable="false" />
  </assistants>
</mdaConfig>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值