vb.net 多线程不工作

vb.net Multithreading not working

我正在学习如何在 vb.net 中进行多线程处理。这是代码,但它不起作用。

这个程序的目的是同时从0到100000对label1和label2进行计数。

但是,在下面的代码中,label2 只会在 label1 完成后才开始计数。谁能教我正确的做法吗?

Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim Thread1 As System.Threading.Thread

    Thread1 = New System.Threading.Thread(AddressOf Me.Count1)
    Thread1.Start()

End Sub

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click

    Dim Thread2 As System.Threading.Thread

    Thread2 = New System.Threading.Thread(AddressOf Me.Count2)
    Thread2.Start()

End Sub

Private Sub InvokeIfRequired(del As [Delegate])

    If InvokeRequired Then
        Invoke(del)
    Else
        del.DynamicInvoke()
    End If

End Sub

Private Sub AddText1()

    Dim i As Integer = 0

    Do Until i = 100000
        i += 1
        Label1.Text = i
        Label1.Refresh()
    Loop

End Sub

Private Sub AddText2()

    Dim i As Integer = 0

    Do Until i = 100000
        i += 1
        Label2.Text = i
        Label2.Refresh()
    Loop

End Sub

Private Sub Count1()

    InvokeIfRequired(Sub()
                         AddText1()
                     End Sub)

End Sub

Private Sub Count2()

    InvokeIfRequired(Sub()
                         AddText2()
                     End Sub)

End Sub

End Class

您应该测试设置标签的文本时是否需要调用,而不是整个循环(如果它在单独的线程中,则不需要刷新)

像这样:

Private Sub Count1()
    Dim i As Integer = 0

    Do Until i = 100000
        i += 1    
        InvokeIfRequired(Sub() Label1.Text = i.ToString())
    Loop

End Sub