Yar*_*veh 46 c# com multithreading interop winforms
我有一些COM组件,我从一些c#dll调用.
我还有一个使用该.dll的winforms应用程序.
当我关闭应用程序时,我得到以下异常:
无法使用已与其基础RCW分离的COM对象.
堆栈跟踪显示此异常来自.dll中的析构函数.我实现了这个析构函数来调用COM中的一些清理方法.
为什么会这样?如何最好地解决它?
Ran*_*Ran 33
这个问题在这里描述:
和这里:
麻烦的是,不仅是这些对象何时被垃圾收集不确定的时间,而且调用终结器的顺序也是不确定的.在这种情况下,运行时可调用包装器也有一个终结器,它自己调用Marshal.FinalReleaseComObject,其结果是减少围栅COM侧的引用计数,以便释放此COM对象.但由于调用终结器的顺序是不确定的,因此很有可能对象引用的COM对象的终结器将在对象的终结器之前触发.因此,终结器中的代码有时可以工作,但是,大多数情况下,对象引用的一个或多个Runtime Callable Wrappers已经调用了终结器,并且在终结器到达之前已经释放了底层COM对象执行其代码.
| 归档时间: |
|
| 查看次数: |
81231 次 |
| 最近记录: |