它可能不是一件簡單的事情剛剛並行運行,UI通常元素都喜歡上一個工作線程,所以你可能想打破這一點。
假設一切工作並行的循環看起來像
Parallel.ForEach(arrComputers, Sub(strComputer)
do stuff
do stuff
n = DataGridView1.Rows.Add()
OtherSub(n, strComputer)
end sub())
雖然香港專業教育學院採取使用
Dim Tasks as list(of task)
For Each strComputer In arrComputers
tasks.add(task.run(sub()
do stuff
do stuff
n = DataGridView1.Rows.Add()
OtherSub(n, strComputer)
End Sub())
Next
do OtherStuff
do OtherStuff
Task.waitall(tasks.toarray)
我覺得它更靈活,我可以混合了需要的東西同步完成的事可以並行完成,也可以更爲乾淨地擴展到Net 4.5中的異步模型,其中task.waitall可以更改爲任務等待task.whenall,如果需要,我可以實現異步並行。 另外,如果你的lambda中有很多代碼,你可以將它粘在一個子文件中以提高可讀性。 Tim
我得到運行(for task.run)不是system.threading.tasks.task和toarray(for task.toarray)的成員不是任務的成員。 – user3406776
我也嘗試了你的第一個方法,並且得到一個「AmbiguousMatchException」錯誤。 – user3406776