我正在使用BackgroundWorker线程执行一项长时间任务(基本上读取一个大的xml文件)。这是工作人员第一次按需要正常工作,但如果我上传第二个xml文件,使用相同的后台工作程序,它有时可以正常工作,但大部分时间BackgroundWorker的RunWorkerCompleted甚至在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'。 –
无法回答,至少没有看到DoWork()的大纲。 –
如果您的DoWork函数产生一个线程来执行其工作,并且您不执行.Join(),DoWork将立即返回。但正如@亨克所说,需要了解DoWork的功能。 – bland