Как перекачивать сообщение для потоков COM STA в C #?

У меня есть основной поток STA, который вызывает множество методов для объекта COM, и дополнительный поток STA, который также много работает с одним и тем же объектом. Я хочу, чтобы основной поток и вспомогательный поток работали параллельно (т.е. я ожидаю чересстрочного вывода от основного и вспомогательного). Я знаю, что мне время от времени нужно перекачивать сообщения в основной поток - вызов Get / Translate / DispatchMessage в C ++ поможет.

Но у меня проблемы с тем, чтобы та же стратегия работала в C #. Сначала я использовал CurrentThread.Join () в основном потоке, чтобы передать управление второму потоку. Не сработало. Затем я обратился к Application.DoEvents () - я вызывал его в основном потоке всякий раз, когда мне нужно было запустить второй поток. В результате второй поток быстро захватывает элемент управления и не отпускает его - основной поток не может продолжаться, пока второй поток не будет завершен.

Я читал документы, в которых говорится, что Application.DoEvents () будет обрабатывать ВСЕ ожидающие события - пока GetMessage () получает только одно сообщение.

Что делать правильно? Есть ли в C # эквивалент Get / Translate / DispatchMessage?

Спасибо

ОБНОВЛЕНИЕ: второй поток работает слишком быстро, отправляя много сообщений о вызовах COM в основной поток STA. Я просто добавил задержки во втором потоке, чтобы замедлить его. Теперь два потока в основном работают параллельно.Но я все же хотел бы знать, есть ли в C # эквивалент GetMessage / TranslateMessage / DispatchMessage.

5
задан Charlie 21 July 2011 в 05:37
поделиться