软件判断 BackGroundWorker.IsBusy 永远为True解决办法
问题
后台工作BackGroundWorker可以通过BackgroundWorker.CancelAsync()请求停止。 进程是否停止,可以用
BackGroundWorker.IsBusy属性检测。
然而
if(backgroundWorker.IsBusy)
{
backgroundWorker.CancelAsync();
while(backgroundWorkerScan.IsBusy)
{
Thread.Sleep(100);
}
}
会陷入循环永不退出。
原因和解决方案
Sleep()阻止了backgroundWorker_RunWorkerCompleted()的运行。而 IsBusy需要等到RunWorkerCompleted运行完才转False。
这里RunWorkerCompleted是backgroundWorker的完成回调方法。
插入一个运行事件就可以解决:
if(backgroundWorker.IsBusy)
{
backgroundWorker.CancelAsync();
while(backgroundWorkerScan.IsBusy)
{
Application.DoEvents();
Thread.Sleep(100);
}
}