2011-01-15 19 views
3

簡略化して、私はいくつかのバックグラウンドスレッドを開始します(これは元の方法です)。作業を完了すると、イベントが発生します。方法。スレッドを終了するかメインスレッドに参加させる方法

イベントが発生すると、イベントは発生したスレッドの下で実行されます。そのイベントの中から元のメソッドを呼び出す前に、私はメインスレッドに戻って参加したい(または元のメソッドの中に戻って参加する)。このように、スレッドを増やすとスレッドが増えます。

私は、元のスレッドがもっとスレッドを呼び出すとガベージコレクションされないことに心配していますね。これは事実でしょうか?スレッドが終了したことをどうすれば確認できますか?

私は、x個のスレッドしか誰でも実行できないことに注意してください。

+0

もう少しお読みになりましたが、これはすべて自動的に処理されるため、問題ではないと思います。しかし、私は誰かがこれについて何か面白いことがあった場合に備えて、この質問をしばらく削除しないことに決めました。 –

答えて

2

スレッドは独立しています。それらの間で作業をプッシュするには、基本的な同期キュー、またはControl.Invokeメソッドのようなものが必要です。 anotheスレッドが終了したまで

待つには、使用することができます:

otherThreas.Join(); 

しかし、多くの方法でイベントのアプローチがきれいです。しかし、今までのスレッドは他のスレッド上にあるので、上記のように(たとえば)UIスレッドに戻す必要があります。

+0

UIスレッドとは、メインスレッドを意味しますか?これは最終的にWindowsサービスが不足するクラスライブラリです。 –

+1

@MrShoubs - 実際には「メイン」スレッドはありません。最初に作成されることを除いて、エントリポイントスレッドに関して特別なことはありません。私はおそらく、プライマリスレッドがその場合に作業キューにサービスを提供したいと提案するでしょう... –

+0

(そしてスレッドの数は非バックグラウンドスレッドになります) –

関連する問題