我需要凍結主線程直到結束遞歸。 遞歸深度=線程數。如何跟蹤所有線程的完成情況。 C#
示例代碼:
BackgroundWorker backgroundWorker1;
Random ran;
private void Form1_Load(object sender, EventArgs e)
{
method();
label1.Text = "Threads is finished";
}
private void method() // recursive method
{
Thread.Sleep(100);
backgroundWorker1 = new BackgroundWorker();
backgroundWorker1.DoWork +=
new DoWorkEventHandler(backgroundWorker1_DoWork);
backgroundWorker1.RunWorkerAsync(); //Beginning new thread
}
private void backgroundWorker1_DoWork(object sender,
DoWorkEventArgs e)
{
ran = new Random();
Thread.Sleep(ran.Next(500, 1000));
if (ran.Next(1, 5) != 1) // if = 1 then to stop recursion
{
method();
}
}
當線程完成時,label1.Text
必須具有值"Threads is finished"
。這是如何完成的?
您分配一個新的「線程/工作者」對象實例的現有的和單'backgroundWorker1'變量,不知道這是好的,至少如果你想wairing所有創建的線程,這不是很好,你有以引用所有創建的線程/工作者實例 – sll
我相信這種模式被稱爲叉式炸彈,但它不能很好地擴展。同樣如sll指出的那樣,這些實例變量不是線程安全的。爲什麼不問問題而不是提出一個解決方案? http://blogs.msdn.com/b/oldnewthing/archive/2006/03/23/558887.aspx –
代碼太愚蠢了,重複啓動bgw沒有意義。只需使用一個bgw並在DoWork中編寫一個循環。在RunWorkerCompleted事件處理程序中設置標籤。 –