我有一个线程 A(主 STA 线程),它创建一个 COM 对象并希望将它传递给另一个线程,所以我使用CoMarshalInterface
API。
线程 B(MTA/STA 无关紧要)处理许多类型的事件,其中之一是接收流并调用CoUnmarshalInterface
以获取代理对象。
因为调用CoUnmarshalInterface
可能会失败(出于任何原因),如果发生这种情况,我必须调用CoReleaseMarshalData
以释放流数据,但是,MSDN 文档说:
重要提示:您必须在调用将对象编组到流
CoReleaseMarshalData
中的同一个单元中调用该函数。CoMarshalInterface
不这样做可能会导致流中的封送数据包持有的对象引用被泄露。
因此,在线程 A 中,我在调用后实现了等待CoMarshalInterface
并检查是否CoUnmarshalInterface
成功,但问题是在我等待时,如果线程 B 或另一个线程进行远程通信操作,因为线程 A 被阻塞等待结果,我陷入僵局。
我也试过使用CoWaitForMultipleHandles
没有运气。
真的需要CoReleaseMarshalData
在同一个公寓打电话吗?你知道另一种处理这个问题的方法吗?