下面的代碼是測試使用3個task去執行count_wast_time()這個函數;然後再畫面上面顯示“count_wast_time 開始”;但是一旦添加 Task.WaitAll界面就卡死了,為什麼??
求指導
private void button3_Click(object sender, EventArgs e)
{
var tasks = new Task[3];
int i = 0;
int j = 0;
int k = 0;
a2 = 0;
string s1 = "";
tasks[0] = Task.Factory.StartNew(() =>
{
count_wast_time();
}
);
tasks[1] = Task.Factory.StartNew(() =>
{
count_wast_time();
}
);
tasks[2] = Task.Factory.StartNew(() =>
{
count_wast_time();
}
);
Task.WaitAll(tasks[0], tasks[1], tasks[2]); //???出問題
label3.Text = label3.Text + "全部執行完畢";
}
private void count_wast_time()
{
this.label3.Invoke(new Action(() =>
{
label3.Text = "count_wast_time 開始\n";
}));
for (int i2 = 0; i2 < 600; i2++)
{
for (int j2 = 0; j2 < 200; j2++)
{
for (int k3 = 0; k3< 100; k3++)
{
}
}
}
}
WaitAll是Task类的静态方法,它阻塞调用线程,直到数组中所有的Task对象完成。因此在Task数组中的任务没有完成时表现出来的就是界面卡死现象
waitall就是等待全部完成啊,这代码应该放在工作线程里,等待完成invoke调用label。这样就不会阻塞ui了。