我有一个多线程程序。我想启动新的BackgroundWorker
并暂停当前线程。然后我想在新BackgroundWorker
中恢复前一个帖子。
我用C#编程。
我有一个大项目,不能把我的代码放在这里。
答案 0 :(得分:1)
您可以使用AutoResetEvent并使用WaitOne来保留父线程。从生成的线程调用AutoResetEvent.Set方法以继续执行父(主)线程。
childThread.Start();
autoResetEvent.WaitOne();
在孩子(衍生线程)
private void SpawnedThread()
{
//your code
autoResetEvent.Set(); //will resume the execution after WaitOne(), may be under some condition.
}
您可以使用overloaded version of WaitOne来提供最长等待时间。执行将恢复Set方法直到给定时间才被调用。
答案 1 :(得分:0)
尝试设置WorkerSupportsCancellation = true,在ProgressChanged事件中你可以这样做:
BackgroundWorker bw = sender as BackgroundWorker;
bw.CancelAsync();
bw.RunWorkerAsync();
答案 2 :(得分:0)
这是我的示例代码!我不太确定它对你的项目有用,但这是我的想法。希望对你有所帮助。
BackgroundWorker bwExportLogFile = new BackgroundWorker();
private void ExportLogFile() {
bwExportLogFile.DoWork += bwExportLogFile_DoWork;
bwExportLogFile.RunWorkerCompleted += bwExportLogFile_RunWorkerCompleted;
bwExportLogFile.ProgressChanged += bwExportLogFile_ProgressChanged;
bwExportLogFile.RunWorkerAsync();
bwExportLogFile.WorkerReportsProgress = true;
bwExportLogFile.WorkerSupportsCancellation = true;
}
void bwExportLogFile_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
BackgroundWorker bw = sender as BackgroundWorker;
if(some thing is true here){
bw.CancelAsync();
}
}
因此,当您想再次在BackgroundWorker中运行线程时,请调用它:
bwExportLogFile.RunWorkerAsync();