1

我猜默认行为是,当我使用后台工作者实现它时,用户可以取消长时间运行的进程。WorkerSupportCancellation 有什么意义?

  1. 如果我不将此 WorkerSupportCancellation 用作 true,用户将无法取消?或者换句话说,是否必须定义 this ?

  2. 如果问题一的答案是“非强制性”,那么为什么这是 MS 提出的功能?我认为没有什么好的理由阻止用户取消该过程,这完全取决于他的选择。此功能适合什么场景?

有人可以对此有所了解。

4

3 回答 3

4

是的,它必须设置true为允许异步取消。调用CancelAsync()WorkerSupportsCancellation设置为的 BackgroundWorkerfalse将导致InvalidOperationException.

请参阅:BackgroundWorker.CancelAsync()

于 2013-03-13T12:54:45.087 回答
4

我相信InvalidOperationException如果你在没有设置它的情况下尝试取消它,它会抛出一个错误,所以它是强制性的。

我能看到以这种方式设计它的唯一原因是让写工作人员的人指出是否可以取消。从逻辑上讲,并非所有BackgroundWorkers都可以取消,因此使用工人的人可以更轻松地查看是否可以取消。

于 2013-03-13T12:56:15.687 回答
2

WorkerSupportCancellation必须设置为 true 才能支持异步取消。否则调用CancelAsync()会抛出InvalidOperationException. 因此,针对您的问题:

  1. 是的,这必须是真实的,用户才能取消。仅当必须具有取消能力时才具有强制性。

  2. 根据您的应用程序的要求,您可能希望在后台执行一项任务,例如数据库查询、与文件系统交互等……这些任务必须完成并且可能不是由用户发起的。因此,在某些情况下,可能不需要异步取消,因为大多数用户发起的操作取消是一个很好的支持特性。

这是有关WorkerSupportsCancellationBackgroundWorkers的一些附加信息。

于 2013-03-13T13:01:42.223 回答