>與STA線程和消息泵的跨線程通信
>>本指南說明瞭如何將消息安全地發送到應用程序中其他線程的單線讀公寓(STA)線程的消息泵。 當使用需要sta線程的com對象時,這尤其重要。
>>使用com對象創建和管理sta線程:
我們可以使用消息泵創建一個sta線程,以託管這樣的com對象:
><code class="language-csharp">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();</code>使用自定義基礎類:
> 為了確保將消息發送到STA線程時,我們可以使用自定義基類:
此類管理線程安全的消息隊列。 諸如
或<code class="language-csharp">class STAThread : IDisposable { [...Implementation Here...] }</code>之類的方法允許您在Sta線程上執行代碼。該方法安全地關閉了線程,儘管至關重要的是確保所有com對像在處置前都正確釋放以避免問題。
BeginInvoke
Invoke
結論:Dispose()
>及其相關的com對像對於應用程序穩定性至關重要。
以上是如何將消息安全地發佈到來自其他線程的STA線程的消息泵?的詳細內容。更多資訊請關注PHP中文網其他相關文章!