BackgroundWorker.IsBusy
属性在 DoWork 事件处理程序忙碌 且 RunWorkerCompleted 事件处理程序未运行时为 true。请注意后一子句,该属性不会告诉您循环是否处于活动状态。
此外,第二个代码片段中存在相当恶劣的竞争条件。在 if()
语句中 IsBusy 可能为 true,但在一纳秒后可能为 false。这是每月发生的一种竞争情况。由于无法理解代码片段的意图,因此难以提供解决方法。考虑始终创建新的 BGW 对象,这将永远不会有竞争情况。这有助于消除循环,沉睡10秒的线程正在浪费非常昂贵的系统资源。并阻塞了线程池调度程序。
yourBackgroundWorker.WorkerSupportsCancellation = true;
。
然后只需使用以下代码停止Backgroundworker:yourBackgroundWorker.CancelAsync();
但是isBusy
足以检测你的BackgroundWorker
正在运行/工作。