线程暂停和恢复

时间:2013-11-27 05:54:12

标签: c# multithreading

我有一个多线程程序。我想启动新的BackgroundWorker并暂停当前线程。然后我想在新BackgroundWorker中恢复前一个帖子。 我用C#编程。

我有一个大项目,不能把我的代码放在这里。

3 个答案:

答案 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();