把上面的代码修改一下,使用线程。
Imports System.Threading ’导入命名空间
Public Class Form1
Dim t As Thread ’定义全局线程变量
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
t = New Thread(AddressOf test) ’创建线程,使它指向test过程,注意该过程不能带有参数
t.Start() ’启动线程
End Sub
Private Sub test()
For i = 0 To 9000
Label1.Text = i.ToString
Next
t.Abort()
End Sub
End Class
再次运行,点击确定,出错啦?什么错?如图:
由于是从一个新的线程调用UI线程中窗体控件,所以这个做法很危险,你直接被拒绝了。
有一个解决办法,就是让编译器不进行跨线程检查。
在Load代码第一行加一句:
CheckForIllegalCrossThreadCalls = False
再次运行程序,就不会有错了,你还能看见动态变化,并且没有“假死”:
如上就是线程的好处。
但是:
CheckForIllegalCrossThreadCalls = False
一句跨线程调用Windows窗体控件就万能了吗?毕竟这种方式很不优秀。
不然,请看下文。