0

我有一个作为主线程的 GUI 表单,而我有一个不同的类用于需要完成的实际工作。

有没有办法正确检查CancellationPending工人的属性,因为它是从不同的类激活的,除了将工人作为“DoJob”方法的参数传递,以便它可以检查属性?

代码(在主类中):

// This method is registered as the DoWork method for the worker
private void BackgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
    workClassInstance.DoJob();
}

private void buttonCancel_Click(object sender, RoutedEventArgs e)
{
    if (bw.WorkerSupportsCancellation == true)
    {
        bw.CancelAsync();
    }
}
4

1 回答 1

0

并不真地; 您几乎需要IsCancelled定期检查 BGW 的属性以正确取消。如果给定操作明确知道 BGW 很重要,那么有几个选项。


如果不公开 BGW 真的很重要,您可以做的一件事是使用 aCancellationToken代替。您可以创建 aCancellationTokenSource并将其公开给负责取消任务的任何人,然后将Tokencts 的值传递给负责取消任务的任何人。


另一种选择是您可以将 aFunc<bool>作为参数传递给DoJob. 该函数在调用时将返回任务当前是否请求取消。然后你会这样称呼它:

workClassInstance.DoJob(()=> worker.CancellationPending);

您现在已经从 中“隐藏”了后台工作人员,workClassInstance并且只公开了它需要的功能的那一方面,即是否已请求取消。

于 2013-05-24T19:52:28.937 回答