2012-10-29 37 views
-2

我已经动态地创建了线程。获取线程在多线程中的状态

static void Main(string[] args) 
{ 

    int ThreadCount =Convert.ToInt32ConfigurationManager.AppSettings["Threads"]); 
    List<Thread> th = new List<Thread>(); 
    for (int i = 0; i < ThreadCount; i++) 
    { 
     Thread t = new Thread(print); 
     th.Add(t); 
    } 
    foreach (Thread t in th) 
    { 
     t.Start(); 
    } 
} 
public static void print() 
{ 
    console.writeline("123"); 
} 

我想知道这个线程何时会完成。 完成这些线程后,我想打印“完成”消息

我该怎么做。

回答

5

Thread.Join()可以帮助;见http://msdn.microsoft.com/en-us/library/95hbf2ta.aspx

foreach (var t in th) 
    t.Join(); 

Console.WriteLine("DONE"); 

您可能想要查看更高级别的TPL(任务并行库)API;见http://msdn.microsoft.com/en-us/library/dd537609.aspx。从长远来看,使用起来可能更容易。

var tasks[] = new Task[n]; 
for (int i = 0; i < n; ++i) 
{ 
    tasks[i] = new Task(() => Console.WriteLine(123)); 
    tasks[i].Start(); 
} 

Tasks.WaitAll(tasks); 
Console.WriteLine("DONE"); 

或者在PLINQ,http://msdn.microsoft.com/en-us/library/dd460688.aspx,(没有编译的代码)

Parallel.ForEach(Enumerable.Range(1, n), i => Console.WriteLine(i)); 
Console.WriteLine("DONE"); 
+1

我认为,在回答问题的第一部分,你应该把的foreach(VAR吨日) 吨。加入();而不是 –

+0

哎呀,感谢您的更正。将编辑。 –