c# - 如何恢复/中断 BackgroundWorker 线程

标签 c# .net multithreading backgroundworker

在我的程序中,会有一个我必须调用的时间

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/

相关文章:

c# - 为什么 channel "Debug"和 "Analytic"不适用于我的 ETW-EventSource 实现?

C# 让线程在出队时休眠?

c# - 由于依赖程序集的版本号,依赖程序集未复制到输出目录

c# - FileSystemWatcher 类 - 排除目录

.net - 'Version' 属性未在 nuspec 文件中声明

java - 处理应用程序内 WiFi 状态的定期检查

c# - 如何从不同线程更新ASP.NET Web表单?

c# - 为基本线程同步配置 WaitHandle

c# - DataTable.Select 与 List.FindAll

c# - 检查两个列表中的重复项