暂停和恢复BackgroundWorker

本文关键字:BackgroundWorker 恢复 暂停 | 更新日期: 2023-09-27 18:09:36

我一直想知道是否有任何方法可以将BackgroundWorker移动到睡眠状态并再次像线程一样恢复它。我在很多论坛上搜索都是徒劳的。没有一个方法能做到这一点。我检查了微软文档,发现没有任何预定义的方法。

我知道使用resetEvents的变通方法。只是要求其他可能的更简单的方法。

暂停和恢复BackgroundWorker

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

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

PauseTokenSource API正是为您所需要的而构建的,它的API可以取代您对Thread的使用。睡眠和所有的信号事件

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

DoWork处理程序中,您可以随时调用Thread.Sleep()。如果你想,从GUI,能够信号工作者暂停,设置一个并发队列,从GUI线程输入你的睡眠请求,并让你的DoWork处理程序定期检查队列,暂停请求。

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

相关文章:
  • 没有找到相关文章