从背景工作者返回

时间:2011-07-11 19:16:21

标签: .net visual-c++ backgroundworker

我正在为背景工作者工作。这就是我需要做的事情:从后台工作者返回,然后返回到程序的主线程。我正在使用Windows窗体应用程序,取消后台工作程序后,控件应该返回到窗体,这样我就可以再次调用相同的函数。

我添加了示例代码,因为我在while循环中使用的代码非常大。

void funtion1()    
{
  while(true)
  {
    if(backgroundWorker1->CancellationPending)
    {
       e->Cancel = true;
       return ;
    }
  }
}

注意:目前当我在停止该函数后执行相同的工作时返回System.NullReferenceException我还注意到我的DOWORK()事件正常工作。

我需要的是backgroundWorker1->CancelAsync();停止后台工作人员并使用backgroundWorker1->RunWorkerAsync();再次启动相同的功能。

但是,当我使用后台工作程序调用相同的函数时,系统会抛出System.NullReferenceException

为什么要抛出System.NullReferenceException,我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

后台线程独立于启动它的线程运行。主线程将在启动另一个线程后立即继续。

如果要在后台工作程序完成时执行某些操作,则可以处理WorkerCompleted事件。

此外,您的代码不正确。

DoWork事件处理程序中的代码将侦听CancelationPending。主线程调用BW上的取消设置CancelationPending。

你应该在这里阅读BW:http://msdn.microsoft.com/en-us/library/8xs8549b.aspx