我正在使用BackgroundWorker线程执行长时间任务(基本上是读取一个大型XML文件)。第一次工作正常,但如果我上传第二个XML文件并使用相同的BackgroundWorker,有时它能正常工作,但大多数情况下在DoWork事件之前就会触发Backgroundworker的RunWorkerCompleted。以下是部分代码:
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是一个全局定义的变量。我不明白这里有什么问题。请帮忙解释一下。
GC.Collect()
,要检查e.Error
。 - H H