有时线程在代码结束后仍然存在

时间:2016-09-26 08:24:20

标签: vb.net multithreading isalive

我必须在vb中编写一个多线程程序,它可以同时处理目录中的文件。 问题是它可以运行几个小时。然后它突然停留在" Thread.Sleep(500)"因为所有3个线程的isAlive方法都返回" true"价值,但" StartSub"在所有线程中结束......似乎没有终止。我的代码错了或可能是什么问题?

基本上,该计划如下:

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

1 个答案:

答案 0 :(得分:0)

似乎线程处理很好,垃圾收集器将终止线程留下的线程资源取出来。程序卡住是因为线程从Form控件恢复了信息,有时即使调用,表单上的控件也没有响应。这使线程挂起。