2011-06-19 79 views
0

我有一個隊列中的20,000個項目,我想使用線程池來處理它們。 這是最好的方法嗎?線程池中的排隊作業vb.net

for i as integer = 0 to 19999 
ThreadPool.QueueUserWorkItem (PerformTask, ListTask(i)) 
next 

Sub PerformTask(i as string) 
' do the work here 
end sub 

如何從PerformTask子項返回或設置ui控件?

回答

2

你不能。

但是,您可以爲每個結果分配一個帶有不同插槽的容器(數組,列表)並寫入它。或者,您可以將一個對象傳遞給保持輸入和結果的工作方法。我用這個方法:

Class TaskObject 
    Dim Input As String 
    Dim Result As Whatever 
End Class 

Dim tasks As TaskObject() = New TaskObject(20000) { } 

For i as Integer = 0 to tasks.Length - 1 
    ThreadPool.QueueUserWorkItem(PerformTask, tasks(i)) 
next 

Sub PerformTask(arg As Object) 
    Dim task As TaskObject = DirectCast(arg, TaskObject) 
    ' do the work here 
end sub 

無關:你應該總是使在你的項目Option Strict。沒有例外。你的代碼有編譯器應該檢測到的類型錯誤。

+0

謝謝,我如何向UI線程報告進度,你可以將它包含在你的代碼中嗎? – Smith