Какие блокирующие потоки операции в .NET будут обрабатывать COM-сообщения при блокировке? - PullRequest
3 голосов
/ 11 октября 2010

При создании нового потока STA для размещения COM-компонента STA этот поток несет ответственность за прокачку сообщений Windows, связанных с COM.Из того, что я смог собрать, некоторые встроенные потоковые примитивы .NET, такие как lock (Monitor.Enter), сделают это за вас, ожидая, пока объект будет освобожден другим потоком.Другой способ создания COM-сообщений .NET pump для вас, который я видел, заключается в использовании .Join ().

Где можно найти полный список встроенных потоковых примитивов с таким поведением?Ожидание на WaitHandle поддержит это?Как насчет WaitAny () или новых параллельных коллекций в .NET 4?Я не могу найти это в документации для каких-либо конкретных методов.

1 Ответ

2 голосов
/ 11 октября 2010

Это может быть несколько переработано из источника SSCLI20, хотя и датировано. Основной функцией CLR, которая реализует MsgWaitForMultipleHandles, является DoAppresponWait. Из того, что я вижу, он используется AutoResetEvent, ManualResetEvent и Semaphore, но Mutex не . Одна из странностей заключается в том, что WaitHandle.WaitAny в порядке из потока STA, но WaitAll () генерирует исключение. Да, это не задокументировано нигде, кроме нескольких подсказок в блоге Криса Брамма. Из того, что я нашел, вы не можете получить слишком много, проверьте это, чтобы убедиться.

...