我正在研究背景工作者 . 这就是我需要做的事情:从后台工作者返回,然后返回到程序的主线程 . 我正在使用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 回答
后台线程独立于启动它的线程运行 . 主线程将在启动另一个线程后立即继续 .
如果要在后台工作程序完成时执行某些操作,则可以处理WorkerCompleted事件 .
此外,您的代码不正确 .
DoWork事件处理程序中的代码将侦听CancelationPending . 主线程在BW上调用Cancel来设置CancelationPending .
你应该在这里阅读BW:http://msdn.microsoft.com/en-us/library/8xs8549b.aspx