Vb.net 多线程工作正常,但在vb中创建新线程时GUI会挂起

Vb.net 多线程工作正常,但在vb中创建新线程时GUI会挂起,vb.net,multithreading,Vb.net,Multithreading,我对这个vb代码有问题。我有两个按钮来创建不同的计数线程。当我创建一个线程时,我使用invoke来更新GUI标签,它工作正常,但当我按按钮2创建一个新线程时,两个标签都挂起(新值不是update)。 没有例外,没有错误 Public Class Form1 Dim Thread1 As System.Threading.Thread Dim Thread2 As System.Threading.Thread Delegate Sub ThreadDelegateTemplate(ByVa

我对这个vb代码有问题。我有两个按钮来创建不同的计数线程。当我创建一个线程时,我使用invoke来更新GUI标签,它工作正常,但当我按按钮2创建一个新线程时,两个标签都挂起(新值不是update)。 没有例外,没有错误

Public Class Form1



Dim Thread1 As System.Threading.Thread
Dim Thread2 As System.Threading.Thread
Delegate Sub ThreadDelegateTemplate(ByVal str As String)

Public myThread1 As ThreadDelegateTemplate
Public myThread2 As ThreadDelegateTemplate

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

    myThread1 = New ThreadDelegateTemplate(AddressOf updateLabel)
    Thread1 = New System.Threading.Thread(AddressOf upcount)
    Thread1.Start()
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    myThread2 = New ThreadDelegateTemplate(AddressOf updateLabel2)
    Thread2 = New System.Threading.Thread(AddressOf upcount2)
    Thread2.Start()
End Sub
Private Sub upcount()
    Dim i As Integer = 0
    Do Until i = 10000
        i = i + 1
        Invoke(myThread1, New Object() {Convert.ToString(i)})
    Loop
End Sub
Private Sub updateLabel(ByVal str As String)
    Label1.Text = str
End Sub
Private Sub upcount2()
    Dim i2 As Integer = 0
    Do Until i2 = 10000
        i2 = i2 + 1
        Invoke(myThread2, New Object() {Convert.ToString(i2)})
    Loop
End Sub
Private Sub updateLabel2(ByVal str As String)
    Label2.Text = str
End Sub

End Class

这看起来不像VBA代码。这可能是因为您的两个线程毫不延迟地运行,并且都试图同时更新UI。如果UI线程太忙,它将没有时间重新绘制。在更改两个
updateLabel
方法中的文本后,尝试插入
Label1.Refresh()
Label2.Refresh()
。谢谢您的帮助,先生,但是,如果我在不同线程中使用多个文本框、图表、MySQL DB状态和序列,那么我可以使用Refresh方法吗?我不知道,这取决于许多不同的因素。但是,如果您发现自己过于频繁地更新UI,那么您可能需要重新考虑您的模式。