2011-06-19 78 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