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

时间:2010-10-11 09:24:36

标签: .net multithreading com sta

当创建新的STA线程来托管STA COM组件时,该线程负责抽取与COM相关的Windows消息。从我能够收集到的内容,某些内置的.NET线程原语(如lock(Monitor.Enter))将在等待对象被另一个线程释放时为您执行此操作。我见过的另一种为你提供.NET泵COM消息的方法是使用.Join()。

在哪里可以找到具有此行为的内置线程基元的完整列表?等待WaitHandle会支持吗?那么WaitAny()或.NET 4中的新并发集合呢?我无法在文档中找到任何具体方法。

1 个答案:

答案 0 :(得分:2)

这可以从SSCLI20来源进行一些反向工程,尽管它已经过时了。实现MsgWaitForMultipleHandles的核心CLR函数是DoAppropriateWait。从我看来,它由AutoResetEvent,ManualResetEvent和Semaphore使用,但是Mutex 。一个怪癖是来自STA线程的WaitHandle.WaitAny是可以的,但WaitAll()会产生异常。是的,除了克里斯布鲁姆博客中的一些提示之外,没有任何记录。你不能从我发现的东西中承担太多,测试这一点是肯定的。