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
我正在学习如何在 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