メソッドにバックグラウンドワーカーを定義できますか?バックグラウンドワーカーとガベージコレクション?
private void DownLoadFile(string fileLocation){
BackgroundWorker worker = new BackgroundWorker();
worker.DoWork += new DoWorkEventHandler((obj, args) => {
// Will be executed by back ground thread asynchronously.
args.Result = Download(fileLocation);
});
worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler((obj, args) => {
// will be executed in the main thread.
Result r = args.Result as Result;
ReportResult(r);
});
worker.RunWorkerAsync(fileLocation);
}
質問:ダウンロード()関数は、ファイルをダウンロードするのに長い時間がかかる場合、GCがでキックとRunWorkerCompleted前に労働者のオブジェクトを収集することができます()が実行されますか?
デリゲート(Action(Of String)が行う)を使用し、BeginInvokeを呼び出すことをお勧めします。私は、このコードでBackgroundWorkerが必要ないとは思わない。メソッドが完了したときにイベントを添付することはできます。 – JDB
これを行うより良い方法は、 'QueueUserWorkItem'を使用してスレッドプールキューに追加することです。http://msdn.microsoft.com/en-us/library/system.threading.threadpool.queueuserworkitem.aspx –
@Jスレッドプールは素晴らしいですが、右のSynchronizationContext *でコールバック*を処理するのが難しくなります。 TPLはそれをうまく処理します。 –