在我的程序中,会有一个我必须调用的时间
Thread.Sleep(Timeout.Infinite);
“暂时暂停”BackgroundWorker。在后台工作线程休眠之前将显示一个组框。该组框有一个按钮,应该“唤醒”后台工作线程并继续它。
如果我在 button_Click 事件中调用 Thread.Interrupt()(顺便说一句,我似乎无法使用,除非我创建了一个 Thread 对象,而我不应该这样做),例如:
private void button1_Click(object sender, EventArgs e)
{
Thread.Interrupt(); //interrupt thread
}
它“将”中断的线程是 UI 线程,对吗?我需要做的是中断 BackgroundWorker 线程。我该怎么做?
编辑:感谢那些回答这个问题的人。我将使用 AutoResetEvent。似乎更适合我使用。
最佳答案
让我从高级概念开始:
您应该做的是在 BackgroundWorker 执行的代码中有一个您经常检查的 token 。设置 token 后,您的后台代码将停止正常流程,并时不时地检查 token ,清除 token 后,后台代码可以继续处理。
所以上面有趣的部分是 token 。我要做的可能是检查一个 bool 值,当该 bool 值设置为 true
时,我会通过等待 ManualResetEvent
来阻止线程。当您想要恢复处理时,您将 bool 值设置为 false 并使用 ManualResetEvent 的 Set()
方法来释放允许代码继续。
关于c# - 如何恢复/中断 BackgroundWorker 线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6806340/