暂停和恢复BackgroundWorker

时间:2016-09-30 12:59:10

标签: c# .net-4.0

我一直想知道是否有任何方法可以让BackgroundWorker进入睡眠状态并像线程一样重新恢复它。我在许多论坛上搜索都是徒劳的。他们都没有表现出任何可以做到这一点的方法。我检查了Microsoft文档,发现没有任何预定义的方法。

我通过使用resetEvents了解变通方法。只是要求任何其他可能的,更简单的方法。

2 个答案:

答案 0 :(得分:3)

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

此类类似于内置的 CancellationTokenSource ,仅适用于暂停任务而不取消它们。

PauseTokenSource API完全是为您所需要的而构建的,它的API可以取代您对Thread.Sleep和所有信令事件的使用。

除了PauseTokenSource之外的其他选项可以使用AsyncManualResetEvent,内部机制非常相似,但它们在API中有所不同。我认为PauseTokenSource更方便,特别是为此目的而构建,更多信息here

答案 1 :(得分:0)

DoWork处理程序中,您可以随时拨打Thread.Sleep()。如果您希望从GUI中发信号通知工作人员暂停,请设置并发队列,从GUI线程将睡眠请求提供给它,让您的DoWork处理程序定期检查队列,暂停按要求。

(如果您希望暂停BackgroundWorker 直到再次发出信号而不是在一段时间内,您可以以类似的方式执行此操作 - 只需定期检查队列a"重新启动"命令并在再次检查之前休眠几毫秒。)