2012-10-29 76 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

哎呀,感謝您的更正。將編輯。 –