线程在for循环中

时间:2014-03-09 09:55:31

标签: vb.net multithreading

当我在循环中创建线程时,如何知道线程是否已完成? 简化代码:

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个异常)

2 个答案:

答案 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")