比如在一个窗体中的代码如下,在另一个线程中显示,隐藏窗口线程中的进度条:
Public Delegate Sub VoidDelegate() '定义委托类型
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Dim th1 As New System.Threading.Thread(AddressOf MyThreadProc) '声明线程
th1.Start() '启动线程运行 MyThreadProc过程
End Sub
Public Sub MyThreadProc()
Me.Invoke(New VoidDelegate(AddressOf StartProgress)) '这个是在另一个线程里调用StartProgress过程,并在创建窗口的那个线程里运行。参数是委托类型。me也可以改成控件名。如果直接调用 StartProgress,那该过程就在与MyThreadProc同一线程中运行,那么StartProgress过程中修改的控件不是在本线程创建的,就会出错。
'。。。。。。。。。
Me.Invoke(New VoidDelegate(AddressOf ShutProgress))
End Sub
Public Sub ShutProgress()
ProgressBar1.Visible = False
End Sub
Public Sub StartProgress()
ProgressBar1.Visible = True
End Sub
'不是还有个Process控件吗,好像也是用来多线程操作的,还没研究,
在form_load事件中加上下面一句就好:
CheckForIllegalCrossThreadCalls = False '不进行跨线程检查,