>与STA线程和消息泵的跨线程通信
>>本指南说明了如何将消息安全地发送到应用程序中其他线程的单线读公寓(STA)线程的消息泵。 当使用需要sta线程的com对象时,这尤其重要。
>>使用com对象创建和管理sta线程:
我们可以使用消息泵创建一个sta线程,以托管这样的com对象:
>private MyComObj _myComObj; // Called from the main thread: Thread staThread = new Thread(() => { _myComObj = new MyComObj(); _myComObj.SomethingHappenedEvent += OnSomethingHappened; Application.Run(); //Starts the message pump }); staThread.SetApartmentState(ApartmentState.STA); staThread.Start();
> 为了确保将消息发送到STA线程时,我们可以使用自定义基类:
此类管理线程安全的消息队列。 诸如
或class STAThread : IDisposable { [...Implementation Here...] }
BeginInvoke
Invoke
结论:Dispose()
>及其相关的com对象对于应用程序稳定性至关重要。
以上是如何将消息安全地发布到来自其他线程的STA线程的消息泵?的详细内容。更多信息请关注PHP中文网其他相关文章!