在线程池vb.net中排队的工作

时间:2011-06-19 18:18:40

标签: vb.net winforms threadpool

我在队列中有20,000个项目,我想使用线程池处理它们。 这会是最好的方法吗?

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 sub返回或设置ui控件?

1 个答案:

答案 0 :(得分:2)

你不能。

但是,您可以为每个结果分配一个具有不同插槽的容器(数组,列表),并写入其中。或者,您可以将对象传递给包含输入和结果的worker方法。我会用这个方法:

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。没有例外。您的代码具有编译器应检测的类型错误。