我有一个主 STA 线程,它在 COM 对象上调用很多方法,还有一个辅助 STA 线程,它也在同一个对象上做很多工作。我希望主线程和辅助线程并行工作(即我希望主线程和辅助线程的交错输出)。我知道我需要时不时地在主线程中发送消息——在 C++ 中调用 Get/Translate/DispatchMessage 就可以了。
但是我在 C# 中使用相同的策略时遇到问题。起初我在主线程中使用 CurrentThread.Join() 来控制第二个线程。它没有用。然后我转向 Application.DoEvents() - 每当我希望第二个线程运行时,我都会在主线程中调用它。结果是第二个线程迅速抓住了控制权并且不会放手——在第二个线程全部完成之前,主线程无法继续。
我读过文档说 Application.DoEvents() 将处理所有等待事件 - 而 GetMessage() 只检索一条消息。
正确的做法是什么?是否存在与 Get/Translate/DispatchMessage 等效的 C#?
谢谢
更新:第二个线程运行太快,向主 STA 线程发送大量 COM 调用消息。我只是在第二个线程中添加了延迟以减慢它的速度。现在两个线程基本上是并行运行的。但我仍然想知道是否存在与 GetMessage/TranslateMessage/DispatchMessage 等效的 C#。