首页 文章

从背景工作者返回

提问于
浏览
-1

我正在研究背景工作者 . 这就是我需要做的事情:从后台工作者返回,然后返回到程序的主线程 . 我正在使用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 回答

  • 1

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

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

    此外,您的代码不正确 .

    DoWork事件处理程序中的代码将侦听CancelationPending . 主线程在BW上调用Cancel来设置CancelationPending .

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

相关问题