我正在为背景工作者工作。这就是我需要做的事情:从后台工作者返回,然后返回到程序的主线程。我正在使用Windows窗体应用程序,取消后台工作程序后,控件应该返回到窗体,这样我就可以再次调用相同的函数。
我添加了示例代码,因为我在while循环中使用的代码非常大。
void funtion1()
{
while(true)
{
if(backgroundWorker1->CancellationPending)
{
e->Cancel = true;
return ;
}
}
}
注意:目前当我在停止该函数后执行相同的工作时返回System.NullReferenceException
我还注意到我的DOWORK()事件正常工作。
我需要的是backgroundWorker1->CancelAsync();
停止后台工作人员并使用backgroundWorker1->RunWorkerAsync();
再次启动相同的功能。
但是,当我使用后台工作程序调用相同的函数时,系统会抛出System.NullReferenceException
。
为什么要抛出System.NullReferenceException
,我该如何解决这个问题?
答案 0 :(得分:1)
后台线程独立于启动它的线程运行。主线程将在启动另一个线程后立即继续。
如果要在后台工作程序完成时执行某些操作,则可以处理WorkerCompleted事件。
此外,您的代码不正确。
DoWork事件处理程序中的代码将侦听CancelationPending。主线程调用BW上的取消设置CancelationPending。
你应该在这里阅读BW:http://msdn.microsoft.com/en-us/library/8xs8549b.aspx