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

 

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注