BackgroundWorker スレッドを使用して長いタスクを実行しています (基本的には大きな xml ファイルを読み取ります)。初めてワーカーは希望どおりに正常に動作しますが、同じバックグラウンド ワーカーを使用して 2 番目の xml ファイルをアップロードすると、正常に動作することもありますが、ほとんどの場合、バックグラウンドワーカーの RunWorkerCompleted は DoWork イベントの前でも発生します。コードの一部を以下に示します
private void openFile_Click(object sender, RoutedEventArgs e)
{
// Code removed for brevity
worker = new BackgroundWorker();
worker.RunWorkerAsync();
worker.DoWork += new DoWorkEventHandler(worker_DoWork);
worker.WorkerReportsProgress = true;
worker.ProgressChanged += new ProgressChangedEventHandler(worker_ProgressChanged);
worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
}
void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
DataImport();
//worker.Dispose();
//worker.Disposed += new EventHandler(worker_Disposed);
//worker.DoWork -= worker_DoWork;
//worker.RunWorkerCompleted -= worker_RunWorkerCompleted;
//worker = null;
//GC.Collect(GC.GetGeneration(worker), GCCollectionMode.Forced);
}
worker はグローバルに定義された変数です。ここで何が間違っているのですか?親切に助けて