答えて

3

同期を追加し、バックグラウンドワーカーがデータを読み取る場所を用意する必要があります。

データをバックグラウンドワーカーに(簡単に)送信できません。作業者がデータを検索できる場所があれば簡単にでき、処理するデータを追加するだけで済みます。同時に(少なくとも)2つのスレッドが同時に潜在的に同時にデータにアクセスするため、その点に同期を確実に配置してください。

+0

私が思ったことは、Skeetsさんより優れたプロデューサー/消費者の例がありますか? http://www.yoda.arachsys.com/csharp/threads/deadlocks.shtml – SwDevMan81

+0

彼は非常にきれいで、厳しい選択肢です。場合によってはReaderWriterLockを使用することもできますが、ReaderWriterLockは読者をブロックしないので、より良いかもしれません(場合によってのみ)。参照してください:http://msdn.microsoft.com/en-us/library/system.threading.readerwriterlock.aspx –

+0

素晴らしい、私はそれをチェックし、私はそれを使用できるかどうかを確認します。ありがとう – SwDevMan81

2

タスクの開始後に追加のデータを渡すためのBackgroundWorker API内のメカニズムはサポートされていません。

しかし、ワーカールーチンは単に別のスレッドで実行されています。 2つの任意のスレッド間でデータを渡すのと同じ方法で、そのスレッドにデータを渡すことができます。 (おそらく悪)静的変数にどのように...

  • 状態変更
  • 当初ワーカールーチン(適切に制御されていない場合はまだ少し悪)にまで渡されたオブジェクトの状態の変化に対する迅速な例をいくつ

これらのアプローチの同期の影響を注意深く考慮する必要があります。

0

定期的に新しいメッセージをチェックするバックグラウンドスレッドである静的キューを使用することをお勧めします。これにより、バックグラウンドスレッドは独自のペースで動作することができます。コールバックメソッドを使用して、メインスレッドに返信することができます。 Reed氏のように、ロックするための静的オブジェクトなどの同期を使用します。

関連する問題