VB.NET 多线程控制窗体控件
由于线程不能直接访问或控制由非线程所创建的控件或窗体,所以一般都是通过委托方式来访问控件。
委托方式是最安全的,比关闭线程访问控件错误信息好得多。
Delegate Sub SetText(ByVal text As String) '声明一个委托,可以理解为声明Btn_SetText过程 Dim i As Integer '定义一个变量,用来更新button2的text属性 Dim dh As System.Threading.Thread? '定义一个窗体级线程 Private Sub Btn_text() '定义一个方法,通过这个方法调用btn_settext来改变button2的text属性 Dim dh As SetText = New SetText(AddressOf Btn_SetText) '定义线程 Me.Invoke(dh, New Object() {CStr(i)}) '委托的“参数” End Sub Private Sub Btn_SetText(ByVal str As String) '这个大家都可以理解了,给属性赋值 Button2.Text = str End Sub Sub Add_text() For i = 0 To 100 Btn_text() System.Threading.Thread.Sleep(100) ‘可要可不要 Next End Sub Private Sub Form1_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed dh.Abort() '结束线程,否则点关闭按钮后无法正常结束程序. End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click dh = New System.Threading.Thread(AddressOf Add_text) '创建一个线程的实例 dh.Start() '开始运行线程 End Sub