0
我不得不在vb中编写一个可以在simultaniusly目录中处理文件的多线程程序。 问题是,它运行良好几个小时。然后它突然在“Thread.Sleep(500)”中找到,因为所有3个线程都是Alive方法返回“true”值,但是“StartSub”在所有线程中结束......并且似乎没有终止。我的代码错了,或者可能是什么问题?有时线程在代码结束后仍然活着
Basicaly的程序是这样的:
private sub main()
importThread = New Thread(AddressOf StartSub)
importThread2 = New Thread(AddressOf StartSub)
for each file in directory
While True
If importThread.IsAlive And importThread2.IsAlive Then
Thread.Sleep(500)
Else : Exit While
End If
End While
If importThread.IsAlive Then
importThread2 = New Thread(AddressOf StartSub)
importThread2.IsBackground = True
importThread2.Start()
Else
importThread = New Thread(AddressOf StartSub)
importThread.IsBackground = True
importThread.Start()
End If
next
End sub
Private Sub StartSub(ByVal tp As Object)
'Read fileinfo and process it for something
end Sub
您为每个目录开始2个新线程。我建议你使用Tasks和TPL,而不是尝试使用原始线程。这将允许你使用正确的方法,而不是线程和对象,结合任务与'await'和'ContinuteWith'等。你也可以使用'Parallel.ForEach'并行处理每个文件夹 –
谢谢,但我在寻找我的代码/思想中的问题。为什么两个线程在其方法进程已经完成时仍然活着,为什么它会在几个小时内工作?理解这个问题可以帮助我在多线程中变得更好...... – user3219009
首先,如何知道何时不将代码发布到'StartSub'?虽然有一些明显的问题,比如为每个文件夹启动两个线程,但只检查* last *迭代中创建的那些线程。即使你没有生成虚拟线程,你的代码也会一直等待其中一个StartSub方法完成。如果没有,循环将不会完成。 –