在Visual Studio中解决DisconnectedContext

Tot*_*oto 13 .net c# debugging visual-studio

当我使用Visual Studio运行我的应用程序时,我总是得到一个DisconnectedContext(一个托管调试助手).鉴于Google和docs,当从其他线程调用STA上的COM对象时,可能会发生这种情况.

但是,当我看到弹出窗口中的所有线程时,我找不到这样的东西.(而且我没有发现任何奇怪的东西).

关于如何找到DisconnectedContext的方式的一些想法?

Nic*_*ick 9

在寻找相同的答案的同时找到这个,我想我会添加评论......

在使用CLR对象通过进程间互操作(在瞬态线程上)的任何多线程应用程序中,此错误几乎是不可避免的.问题是CLR具有非确定性的对象清理(可能是RCW,对底层COM对象具有线程关联性).你无法告诉运行时清理线程上创建的对象(至少不在线程上创建另一个非确定性的清理句柄); 这是互操作机制的设计限制.鉴于此,没有办法安全地退出已创建任何CLR对象的线程而不会出现此错误.

最好的建议:如果你能提供帮助,请不要使用CLR/interop.下一个最好的建议:使用COM +来处理 - 隔离你的互操作,因此CLR可以存在于永远不会终止线程的进程中(使用持久性线程池或等效的).下一个最好的建议:和我一起继续用他们的互操作告诉微软这个设计级别的问题,并希望他们解决它.


Han*_*ant 4

这是一个非常严重的警告,不要忽视它。场景是您在一个线程上创建了一个 COM 对象,然后该线程退出了。但你继续使用那个对象。COM 负责处理声明自己不是线程安全的对象(也称为单元线程),它会自动将该对象上的任何调用封送到创建它的线程。当该线程不再存在时,这将无法工作。

忽略警告可能会偶尔产生且很难排除线程争用错误。每周只会出现一次微妙错误的事情。检查您的代码,注意它所抱怨的对象是如何创建的。

  • 我不想忽略这个警告(用 CTRL+ALT+E 删除它就可以了)。问题是我不知道在哪里查看,因为应用程序很大并且警告没有告诉我为什么它会触发。 (2认同)