STAスレッドとメッセージポンプとのクロススレッド通信
comオブジェクトを使用してSTAスレッドの作成と管理:
このようなcomオブジェクトをホストするためのメッセージポンプを備えたSTAスレッドを作成できます。
カスタムベースクラスを使用した STAスレッドにメッセージを送信するときにスレッドの安全性を確保するには、カスタムベースクラスを使用できます。このクラスは、スレッドセーフメッセージキューを管理します。 STAスレッドでコードを実行できるように、
や<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>
メソッドはスレッドを安全にシャットダウンしますが、問題を回避するためにすべてのCOMオブジェクトが処分前に適切にリリースされることを確認することが重要です。 結論:
このアプローチをカスタム
ベースクラスで使用することにより、他のスレッドからのSTAスレッドのメッセージポンプと確実に通信し、アプリケーションで効率的なスレッド間調整を可能にします。<code class="language-csharp">class STAThread : IDisposable { [...Implementation Here...] }</code>
以上が他のスレッドからSTAスレッドのメッセージポンプにメッセージを安全に投稿する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。