4

Thread クラスを使用して作成されたスレッドに対してコールバック (アクティビティの完了を通知) を与えることはできますか? 次の方法でスレッドを作成しましたが、コールバックを提供する方法が見つかりませんでした。

Thread thread = new Thread(StartPoll);
thread.SetApartmentState(ApartmentState.STA);

thread.Start();
4

2 に答える 2

5

直接ではありません。しかし、いつでも次のようなことができます:

new Thread(() => { StartPoll(); Callback(); })
于 2012-05-08T10:44:01.857 に答える
3

アパートメント状態を STA に設定するだけでは十分ではありません。2 番目の要件は、メッセージ ループをポンプする必要があることです。Winforms または WPF の Application.Run()。実際には、特定のスレッドへの呼び出しをマーシャリングできるのはメッセージ ループです。Control.Begin/Invoke および Dispatcher.Begin/Invoke() によってそれぞれ実装されます。

ただし、これは UI 実装の詳細です。一般的な解決策は、UI スレッドが行うことと非常に似ています。「メイン」スレッドでスレッドセーフ キューとループを使用して、キューからオブジェクトを読み取ります。デリゲートのように呼び出すことができます。生産者/消費者問題の標準的な解決策。.NET 4 の BlockingCollection クラスを使用すると、それが簡単になります。スレッド コードを書き直してループし、ワーカーの要求に応答できるようにすることは、必ずしも簡単ではありません。

于 2012-05-08T12:38:38.213 に答える