暂停和恢复 BackgroundWorker

Pausing and resuming BackgroundWorker

我一直在想,有什么方法可以让 BackgroundWorker 像线程一样进入睡眠状态并再次恢复。我已经在许多论坛中搜索过,但没有结果。 None 其中显示了可以做到这一点的任何方法。我查看了 Microsoft 文档,发现没有任何预定义的方法。

我知道使用 resetEvents 的解决方法。只是要求任何其他可能和更简单的方法。

在您的 DoWork 处理程序中,您可以随时调用 Thread.Sleep()。如果您希望从 GUI 向工作人员发出暂停信号,设置并发队列,将您的睡眠请求从 GUI 线程输入其中,并让您的 DoWork 处理程序定期检查队列,暂停根据要求。

(如果你想暂停 BackgroundWorker 直到再次发出信号 而不是暂停一段时间,你可以用类似的方式做到这一点 - 只是定期检查队列中的 "restart" 命令并在再次检查前休眠几毫秒。)

如果您使用 Task 而不是 BackgroundWorker,则可以使用 PauseTokenSource.

这个class类似于内置的CancellationTokenSource只适用于暂停任务而不是取消它们。

PauseTokenSource API 正是为满足您的需求而构建的,它 API 可以替代您对 Thread.Sleep 和所有信号事件的使用。

除了PauseTokenSource 之外的其他选项可以使用AsyncManualResetEvent, the mechanism internal is quite similar but they differ in the API. I think that PauseTokenSource is much more convenient and especially built for this purpose, more info here