出现这种情况可能是由于多种原因造成的,可能是由于未正确注册事件处理程序或线程问题导致的。解决方法可以如下:
在初始化BackgroundWorker之后,应注册DoWork和RunWorkerCompleted事件的处理程序。例如:
bgWorker.DoWork += new DoWorkEventHandler(DoWorkHandler); bgWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(WorkerCompletedHandler);
确保在DoWork方法中正确完成了所有工作,并使用RunWorkerCompleted事件返回结果。例如:
private void DoWorkHandler(object sender, DoWorkEventArgs e){ //执行作业代码 e.Result = DoWorkResult; //DoWorkResult是执行结果 }
当BackgroundWorker运行在不正确的线程上时,可能会导致RunWorkerCompleted事件未能正确调用。确保BackgroundWorker运行在正确的线程上,可以使用Control.CheckForIllegalCrossThreadCalls属性。例如:
private void DoWorkHandler(object sender, DoWorkEventArgs e){ //如果未在UI线程上运行,强制它们运行在UI线程上 if (this.InvokeRequired){ this.BeginInvoke(new MethodInvoker(() => DoWorkHandler(sender, e))); return; } //执行操作代码 }
通过以上方法可以解决Background Worker RunWorkerCompleted未调用的问题。