.net NET中的哪些阻塞线程操作在被阻塞时将处理COM消息?

.net NET中的哪些阻塞线程操作在被阻塞时将处理COM消息?,.net,multithreading,com,sta,.net,Multithreading,Com,Sta,创建新的STA线程以承载STA COM组件时,该线程负责发送与COM相关的Windows消息。根据我收集的信息,某些内置的.NET线程原语(如lock(Monitor.Enter))将在等待另一个线程释放对象时为您执行此操作。我见过的另一种为您生成.NET pump COM消息的方法是使用.Join() 在哪里可以找到具有这种行为的内置线程原语的完整列表?等待WaitHandle会支持这一点吗?WaitAny()或.NET 4中的新并发集合如何?我在任何特定方法的文档中都找不到这一点。这可以从S

创建新的STA线程以承载STA COM组件时,该线程负责发送与COM相关的Windows消息。根据我收集的信息,某些内置的.NET线程原语(如lock(Monitor.Enter))将在等待另一个线程释放对象时为您执行此操作。我见过的另一种为您生成.NET pump COM消息的方法是使用.Join()


在哪里可以找到具有这种行为的内置线程原语的完整列表?等待WaitHandle会支持这一点吗?WaitAny()或.NET 4中的新并发集合如何?我在任何特定方法的文档中都找不到这一点。

这可以从SSCLI20来源进行反向工程,尽管它已经过时。实现MsgWaitForMultipleHandles的核心CLR函数是DoAppropriateWait。据我所见,它被AutoResetEvent、ManualResetEvent和信号量使用,而不是被互斥体使用。一个怪癖是WaitHandle.WaitAny在STA线程中是正常的,但是WaitAll()生成了一个异常。是的,除了Chris Brumme的博客中的一些提示之外,其他地方都没有记录。你不能从我的发现中假设太多,测试一下以确定