Vb.net 多线程工作正常,但在vb中创建新线程时GUI会挂起
我对这个vb代码有问题。我有两个按钮来创建不同的计数线程。当我创建一个线程时,我使用invoke来更新GUI标签,它工作正常,但当我按按钮2创建一个新线程时,两个标签都挂起(新值不是update)。 没有例外,没有错误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
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,那么您可能需要重新考虑您的模式。