2
我正在学习如何在vb.net中执行多线程。这里是代码,但它不起作用。vb.net多线程不工作
该程序的用途是同时计数从0到100000的label1和label2。
但是,在下面的代码中,当label1完成时,label2将只计数。任何人都可以教我如何正确地做到这一点?
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
是的,它现在完美了!但我能知道为什么它不能用于整个循环? –
我认为这是与动态调用。这是等待在循环的持续时间内调用Text属性,而不是每个单独的项目 –
发生的另一个问题。当这两个数字正在计数时,我不能做其他事情,如关闭应用程序或按其他按钮(例如,按钮3)。为什么发生这种情况,我该如何解决它? –