Tag: message pump

哪些阻塞操作导致STA线程泵送COM消息?

当一个COM对象在STA线程上实例化时,该线程通常必须实现一个消息泵,以便为来回调用其他线程(见此处 )。 可以手动泵送消息,或者依赖于某些( 但不是全部 )线程阻塞操作在等待时自动泵送COM相关消息的事实。 文档通常无助于决定哪个是哪个(参见相关问题 )。 如何确定线程阻塞操作是否会在STA上泵送COM消息? 到目前为止的部分清单: 阻塞操作泵*: Thread.Join WaitHandle.WaitOne / WaitAny / WaitAll (虽然无法从STA线程调用WaitAll ) GC.WaitForPendingFinalizers Monitor.Enter (因此lock ) – 在某些条件下 ReaderWriterLock BlockingCollection 阻止不泵送的操作: Thread.Sleep Console.ReadKey (在某处读取) *注意Noseratio的答案说,即使是操作泵,也是为了非常有限的未公开的COM特定消息集。