当我在循环中创建线程时,如何知道线程是否已完成? 简化代码:
Public Sub LoadExcelFiles()
AddMore:
Dim t As New Thread(New ThreadStart(AddressOf CreateExcelFile))
t.Start()
'Check if there are more files.
'If yes: GoTo AddMore
End Sub
我如何知道线程't'何时完成?我想将't'创建的文件添加到树视图中 另一个问题是,当用户丢弃33个文件时,我有11个线程同时运行(每个线程使用3个异常)
答案 0 :(得分:1)
您可以考虑这样做:
Delegate Sub CreateExcelFileAsync()
Public Sub LoadExcelFiles()
Dim d As New CreateExcelFileAsync(AddressOf CreateExcelFile)
Dim result As IAsyncResult = d.BeginInvoke(Nothing, Nothing)
'..
'more work
'..
'wait until completed before starting over
If Not result.IsCompleted() Then
result.AsyncWaitHandle.WaitOne()
End If
d.EndInvoke(result)
End Sub
这样您就可以使用AsyncResult来检查完成情况。
答案 1 :(得分:1)
有关@Paul Deen答案的有趣文章(希望是一个很好的解决方案)可以在http://tech.xster.net/tips/multi-threading-in-vb-net/
找到我以另一种方式做到了。
Dim t As New Thread(New ThreadStart(AddressOf CreateExcelFile))
If t.IsAlive Then
t.Join()
Else
t.Start()
End If
'Some code here
While t.IsAlive
System.Threading.Thread.Sleep("500")
End While
MessageBox.Show("All Files Completed")