2013-01-02 66 views
0

我正在创建一个新线程来在foreach循环的每次迭代期间执行一些代码。这些线程完成后,我想要主线程继续执行,但我不知道如何执行此操作。每次迭代我都不能调用Thread.Join(),因为这会阻止主线程继续执行foreach循环,直到创建的线程完成。下面是代码块,其中testEnvironments是一个字符串类型的列表:当Foreach循环中的其他线程正在运行时阻塞主线程

 foreach (string s in testEnvironments) 
     { 
      myThread = new Thread(() => program.KickoffPricing(s)); 
      myThread.Start(); 
      Thread.Sleep(1000); 
     } 

     email.ComposeEmail(); 
+0

我希望这不是一个UI线程。 – SLaks

+0

这不是一个UI线程。这是一个控制台应用程序。 – Andrew

+0

您是否试图一次运行所有线程?或者你想运行一个线程,等待,然后运行另一个线程?如果后者,这是否真的需要在一个单独的线程? – ThatBlairGuy

回答

4

你需要的所有Thread S的存储在List<Thread>,并作出独立foreach循环,Join()š他们,你开始所有的人后。

请注意,你可以让你的代码使用Task代替Thread,或者更好的,Parallel.ForEach()更简单,更高效。

+0

Parallel.ForEach循环工作得很好。如果我为该循环中创建的线程创建一个列表,那么如何在不阻止调用线程(主应用程序线程)的情况下调用Thread.Join?它看起来像当你调用Thread.Join时会阻止foreach循环运行。 – Andrew

+1

这正是它会做的,一次一个线程。当每个线程完成时,Join将控制返回给foreach,然后重复该过程,直到所有线程都完成。 – ThatBlairGuy

相关问题