我在队列中有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控件?
答案 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
。没有例外。您的代码具有编译器应检测的类型错误。