我正在使用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