多线程中委托改变窗体控件内容
在线程中改变窗体控件的内容,如果不是窗体线程那么运行时会出错:不是从创建该控件的线程访问该控件;后来得知需要用委托:
举例:
Delegate Sub StatusStrip_control(ByVal type As Integer, ByVal status As Integer) 这里是对状态栏控件的内容进行修改
Private Sub Image_status(ByVal type As Integer, ByVal status As Integer) 这里是委托需要做的事情
Select Case type
Case 0
If status = 0 Then
sbarYPTRead.Image = ImageList1.Images(8)
ElseIf status = 1 Then
sbarYPTRead.Image = ImageList1.Images(9)
Else
sbarYPTRead.Image = ImageList1.Images(7)
End If
Case 1
End Select
End Sub
‘在线程函数中
Dim sbarstatusdg As StatusStrip_control = AddressOf Image_status
status_type = 0
status =1
sbarstatusdg.Invoke(status_type, status)
但当我用这种方法去控件中改变字体颜色时,还是会发生错误,正在研究中。。如有高人路过望指点迷津,谢谢
附上使用Control.Invoke或Control.BeginInvoke方法来进行异步操作。
参考下面的文档:
通过多线程为基于 .NET 的应用程序实现响应迅速的用户
http://www.microsoft.com/china/MSDN/library/enterprisedevelopment/softwaredev/misMultithreading.mspx
为Windows应用创建简单的异步调用模式
http://www.microsoft.com/china/MSDN/library/architecture/AsynCallPattern.mspx
试验后发现,me.begininvoke(sub,arg())可以实现
其中sub为委托的过程,arg()是可以携带的参数数组。