蓝色经典

导航

多线程中委托改变窗体控件内容

  在线程中改变窗体控件的内容,如果不是窗体线程那么运行时会出错:不是从创建该控件的线程访问该控件;后来得知需要用委托:

  举例:

  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()是可以携带的参数数组。

 

posted on 2011-08-22 09:07  蓝色经典  阅读(253)  评论(0编辑  收藏  举报