Thread クラスを使用して作成されたスレッドに対してコールバック (アクティビティの完了を通知) を与えることはできますか? 次の方法でスレッドを作成しましたが、コールバックを提供する方法が見つかりませんでした。
Thread thread = new Thread(StartPoll);
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
Thread クラスを使用して作成されたスレッドに対してコールバック (アクティビティの完了を通知) を与えることはできますか? 次の方法でスレッドを作成しましたが、コールバックを提供する方法が見つかりませんでした。
Thread thread = new Thread(StartPoll);
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
直接ではありません。しかし、いつでも次のようなことができます:
new Thread(() => { StartPoll(); Callback(); })
アパートメント状態を STA に設定するだけでは十分ではありません。2 番目の要件は、メッセージ ループをポンプする必要があることです。Winforms または WPF の Application.Run()。実際には、特定のスレッドへの呼び出しをマーシャリングできるのはメッセージ ループです。Control.Begin/Invoke および Dispatcher.Begin/Invoke() によってそれぞれ実装されます。
ただし、これは UI 実装の詳細です。一般的な解決策は、UI スレッドが行うことと非常に似ています。「メイン」スレッドでスレッドセーフ キューとループを使用して、キューからオブジェクトを読み取ります。デリゲートのように呼び出すことができます。生産者/消費者問題の標準的な解決策。.NET 4 の BlockingCollection クラスを使用すると、それが簡単になります。スレッド コードを書き直してループし、ワーカーの要求に応答できるようにすることは、必ずしも簡単ではありません。