vb.net的委托调用

这篇博客介绍了VB.NET中如何正确地在多线程环境下更新UI。通过创建自定义委托和使用Invoke方法,避免了跨线程操作Windows窗体控件时出现的错误。示例代码演示了错误的直接修改UI控件和正确的委托调用方法。
摘要由CSDN通过智能技术生成
 vb.net编程如果用多线程,因为无法传递函数指针,所以就存在了委托调用从而实现获得函数指针的作用:
在VB.NET中,一个委派是一个类型安全、面向对象的函数指针。

委托调用编程如下:


 '定义一个发送端‘更新进度条’的委托
    Public Delegate Sub UpdateSendCallBack(ByVal msg As String, ByVal SendNum As Integer)


 '发送端‘更新进度条’
    Public Sub UpdateSend(ByVal msg As String, ByVal SendNum As Integer)
        If  frmmainsl.ProgressBar1.InvokeRequired Then


            Dim d As New UpdateSendCallBack(AddressOf UpdateSend)
            frmmainsl.Invoke(d, New Object() {msg, SendNum})
        Else


            Me.Label3.Text = msg
            Me.ProgressBar1.Value = SendNum
        End If


总结:delegate声明一个委托——定义委托调用的函数。(委托和函数的参数要一致)


这样在其他线程中要实现更新季度条时要这样写:    frmmainsl.UpdateSend("第" & PacketNum + 1 & "包传送结束!", PacketNum + 1)




正规写法:


定义一个发送端‘更新进度条’的委托
    Public Delegate Sub UpdateSendCallBack(ByVal msg As String, ByVal SendNum As Integer)


   '发送端‘更新进度条’
     Private Sub UpdateSend(ByVal msg As String, ByVal SendNum As Integer)
                 Me.Label3.Text = msg
                  Me.ProgressBar1.Value = SendNum
      End If


这样在其他线程中要实现更新季度条时要这样写:       frmmainsl.Invoke(New UpdateSendCallBack(AddressOf UpdateSend), New Object() {"第" & PacketNum + 1 & "包传送结束!", PacketNum + 1})       




'=============================================================下面是转载========================================


[原帖地址]http://topic.csdn.net/u/20111019/17/ac098c48-ed25-4e1f-acd0-ec192ca44eac.html

  1. '原先错误的写法!  
  2. -------------------------  
  3. Private Sub Button1_Click(ByVal sender As System.ObjectByVal e As System.EventArgs) Handles Button1.Click  
  4.     Dim MyThread As New System.Threading.Thread(AddressOf sum)  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值