我有一个我想要执行的代码循环,但我希望每个传递都是它自己的线程,所以执行很快。在这个传递中,我有几个GUI项目。以下是我的尝试:
sub somesub()
Dim w As WaitCallback = New WaitCallback(AddressOf WorkerDoWork)
for 1 to 10
ThreadPool.QueueUserWorkItem(w, i)
next
end sub
sub WorkerDoWork(i as integer)
dim x as string = drpitem.Selecteditem
end sub
我也尝试过:
sub somesub()
Dim threads As New List(Of Thread)()
for 1 to 10
threads.Add(New Thread(New ParameterizedThreadStart(AddressOf WorkerDoWork)))
threads(i).Start()
next
end sub
sub WorkerDoWork(i as integer)
dim x as string = drpitem.Selecteditem
end sub
关于交叉传播的两个错误。如何在不出错的情况下执行动态多线程循环。还有一点需要注意的是,我可以成功地在GUI中使用后台工作者而不会出错,但我不知道如何动态地使用后台工作程序。
编辑:
在阅读了你的建议marco之后,我想出了答案
sub somesub()
Dim w As WaitCallback = New WaitCallback(AddressOf WorkerDoWork)
for 1 to 10
ThreadPool.QueueUserWorkItem(w, i)
next
end sub
sub WorkerDoWork(i as integer)
dim x as string
invoke(sub() x = drpitem.Selecteditem)
end sub
关键是在中断的地方使用调用,它会起作用。
答案 0 :(得分:0)
问题是,您正在创建一个线程,然后访问另一个正在处理的对象。看看这里:
VB.NET Delegates and Invoke - can somebody explain these to me?