2012-07-31 158 views
0

我在我的代码使用线程后重新开始回来了,线程使用的函数创建:线程暂停

private void InitializeBackgoundWorkers() 
{ 

    for (int f = 0; f < maxThreads; f++) 
    { 
     listBox1.Items.Insert(0, "Starting Thread : " + (f + 1)); 
     threadArray[f] = new BackgroundWorker(); 
     threadArray[f].DoWork += 
      new DoWorkEventHandler(backgroundWorkerFiles_DoWork); 
     threadArray[f].RunWorkerCompleted += 
      new RunWorkerCompletedEventHandler(backgroundWorkerFiles_RunWorkerCompleted); 
     threadArray[f].ProgressChanged += 
      new ProgressChangedEventHandler(backgroundWorkerFiles_ProgressChanged); 
     threadArray[f].WorkerReportsProgress = true; 
     threadArray[f].WorkerSupportsCancellation = true; 

    } 
} 

而且doevent是一样的东西:

private void backgroundWorkerFiles_DoWork(object sender, DoWorkEventArgs e) 
{ 

    BackgroundWorker worker = sender as BackgroundWorker; 

    int flag = 0; 

    while (rowCounter < allPostingRows.Tables[0].Rows.Count && flag == 0) 
    { 

     for (int i = 0; i < maxThreads; i++) 
     { 

      if (threadArray[i].CancellationPending == true) 
      { 
       flag = 1; 
       threadArray[i].CancelAsync(); 
       worker.ReportProgress(0, "Thread Paused:"); 
      } 

     } 

     if (flag == 0) 
     { 
      //perform work here 
      } 
    } 
} 

而且按钮我尝试取消线程使用:

for (int i = 0; i < maxThreads; i++) 
{ 
    threadArray[i].CancelAsync(); 
} 

我是否正确取消线程?当他们被取消我看行的列表框说线程取消,因此不会去取消代码,但一段时间后,它重新启动

谢谢

+0

工人们是怎么开始的?所有工人都重新启动吗他们是否从头开始重新开始? – ekholm 2012-07-31 13:35:57

+0

@PeterRitchie我减少了所有额外的代码,并且现在对它做出了很好的简单的帮助? – confusedMind 2012-07-31 18:56:27

回答

0

我不认为你真的了解BackgroundWorker。事件处理程序应该是一个工作单元的处理程序。用一个线程调用DoWork。从DoWork处理程序中调用CancelAsync没有任何意义 - 它独立于任何和所有其他BackgroundWorker的处理程序。在DoWork处理程序中,它应该只检查一个CancellationPending,发件人(一旦投到BackgroundWorker,在您的案件worker)。

但是,否则,从UI调用CancelAsync是取消特定BackgroundWorker的正确方法。

后台工作人员不是“线程”。您不会取消某个线程,您将取消该工作人员 - 这允许DoWork处理程序在完成工作之前有机会退出。

+0

谢谢,我会给它一个去.... – confusedMind 2012-07-31 19:15:01

+0

谢谢你的提示:)我得到它的工作方式,我想要的:))... – confusedMind 2012-07-31 20:26:37