バックグラウンドワーカーとの間でやり取りされるデータはどうなりますか?バックグラウンドワーカーとの間でやり取りされるデータはどうなりますか?
データはRunWorkerAsyncを使用してバックグラウンドワーカーにメインスレッドから渡されます。これは、バックグラウンドスレッドでDoWorkイベントハンドラで受信された
backgroundWorker.RunWorkerAsync(myData);
:
myData = (Data)e.Argument;
DoWorkが処理した後データ、eを使用して返します。結果:
e.Result = myData;
これはメインスレッドのRunWorkerCompletedイベントハンドラ:
myData = (Data)e.Result;
BackgroundWorkerはスレッド間でデータを受け渡ししています。大量のデータをバックグラウンドワーカーとの間でやりとりすることを期待しているので、この転送のオーバーヘッドを知りたいし、バックグラウンドワーカーで大量のメモリ内オブジェクトを処理するより良い方法があるかどうかを知りたい。スレッドセーフな方法でバックグラウンドワーカーのデータにメインスレッドからアクセスすることが可能であることを知りたいと思います。
参考までに、私はC#、.Net 3.5、Windows Formsを使用しています。
+1質問のマルチスレッド同期部分に答えるための+1。 –