暂停和恢复BackgroundWorker
本文关键字:BackgroundWorker 恢复 暂停 | 更新日期: 2023-09-27 18:09:36
我一直想知道是否有任何方法可以将BackgroundWorker移动到睡眠状态并再次像线程一样恢复它。我在很多论坛上搜索都是徒劳的。没有一个方法能做到这一点。我检查了微软文档,发现没有任何预定义的方法。
我知道使用resetEvents的变通方法。只是要求其他可能的更简单的方法。
如果你使用Task而不是BackgroundWorker,你可以使用PauseTokenSource
这个类类似于内置的CancellationTokenSource,只适用于暂停任务而不取消任务。
PauseTokenSource API正是为您所需要的而构建的,它的API可以取代您对Thread的使用。睡眠和所有的信号事件
除了PauseTokenSource之外,其他选项可以使用AsyncManualResetEvent,内部机制非常相似,但它们在API上有所不同。我认为PauseTokenSource更方便,特别是为此目的而构建的,更多信息在这里。
在DoWork
处理程序中,您可以随时调用Thread.Sleep()
。如果你想,从GUI,能够信号工作者暂停,设置一个并发队列,从GUI线程输入你的睡眠请求,并让你的DoWork
处理程序定期检查队列,暂停请求。
(如果您想暂停BackgroundWorker
,直到再次发出信号,而不是在一段时间内,您可以以类似的方式做到这一点—只需定期检查队列中的"重启"命令并在再次检查之前休眠几毫秒)