0

我有用户报告的奇怪问题,曾经被我转载。

我有各种按钮的形式,每个按钮都执行长时间的操作。

单击新按钮时,旧操作将停止并开始新操作。

我注意到奇怪的行为:

当我单击按钮时,有时操作不会开始。无法启动操作,因为下一个代码:

if (!Worker.IsBusy)
        {
            RunReload();
        }
        else
        {
            isWorkerPendingForNewJob = true;
            Worker.CancelAsync();
        }

取消被调用了几次,但我的工作人员总是很忙!

在此处输入图像描述

当我停止我的项目执行时,我注意到它在锁定部分停止。

在这个锁里面,我只是创建了一些用于所有进程的对象。

图像上的断点永远不会命中。为什么 backgroundworked 总是忙并且被锁定在这条线上?

在此处输入图像描述

4

1 回答 1

1

当您调用时CancelAsync(),它只是将标志设置CancellationPendingtrue。您必须在BackgroundWorker工作功能中定期手动检查此标志并自行中断。你已经这样做了吗?

这是相关的 MSDN 页面

WorkerSupportsCancellation此外,您必须确保true支持CancelAsync.

于 2012-10-20T23:52:36.323 回答