我试图解决“COM对象已经从其基础RCW分离不能使用”的错误,并且我认为是什么导致它是COM对象在没有实例化它们的线程上使用。COM对象是否与RCW分开?
我不允许做太多的重构,因为对象应该在多个线程上可用我不知道是否有一种方法来查明它们是否在当前线程上创建之前,错误。如果他们没有,创建它们。
而且,我是新来这个互操作的事情,所以如果有人能好心帮助我明白,我会非常感激:
与COM对象,一旦线程结束会发生什么,以及为什么RCW在另一个线程上仍然可用,即使它没有COM对象(为什么它不是空的?)。另外,为什么它会导致这个错误,并在Marshal.IsCOMObject上同时返回true?
在以下情况下(S)与引用计数和包装和存储会发生什么:
- 创建的线程上COM对象x一个
- 它传递并保存在线程B 上
- 在线程C-创建另一个X(或者,如果分别为:y会发生什么?)
- 它传递和线程B上覆盖X
Marshal.ReleaseComObject()s遍布整个地方,但这次不会导致它。通过在程序的初始化阶段初始化主线程上的COM对象来解决问题。感谢您的意见,我需要确保它们可以在其他线程中使用,而无需在其中创建它们。但是,在将您标记为已接受之前,我想等待更完整的答案,因为我仍然不明白一些提到的东西.. – Damir 2011-04-05 13:57:01