取消背景任务在C#

当我的C#应用​​程序关闭时,有时会被清除程序中.具体来说,后台工作人员没有关闭.这基本上是我试图关闭它:

private void App_FormClosing(object sender,FormClosingEventArgs e)
{
backgroundWorker1.CancelAsync();
while(backgroundWorker1.IsBusy); //卡在这里
}

有不同的方式我应该这样做吗?我正在使用Microsoft Visual C#2008 Express Edition.谢谢.

附加信息:

后台工作人员似乎没有退出.这是我有的:

private void backgroundWorker1_DoWork(object sender,DoWorkEventArgs e)
{
   while (!backgroundWorker1.CancellationPending)
   {
      // Do something.
   }
}

我也修改了清理代码

private void App_FormClosing(object sender,FormClosingEventArgs e)
{
   while (backgroundWorker1.IsBusy)
   {
      backgroundWorker1.CancelAsync();
      System.Threading.Thread.Sleep(1000);
   }
}

还有什么我应该做的吗?

解决方法

Kevin Gale是正确的,表示您的BackgroundWorker的DoWork处理程序需要轮询“取消预定”,如果请求取消,则返回.

话虽如此,如果您的应用程序关闭时发生这种情况,您也可以安全地忽略它. BackgroundWorker使用一个ThreadPool线程,根据定义,它是一个后台线程.离开此运行将不会阻止您的应用程序终止,并且线程将在您的应用程序关闭自动被拆除.

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...