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