vb.net里的delegate的使用,委托使用

来源:互联网 发布:上帝视角的人 知乎 编辑:程序博客网 时间:2024/05/19 17:06

Imports System.NET
Imports System.Threading

Public Class FrmLanPC

    Delegate Sub ShowProgressDelegate(ByVal newPos As Integer)

    Private Sub ShowProgress(ByVal newPos As Integer)
        ' 判断是否在线程中访问
        If Not Me.InvokeRequired Then
            ' 不是的话直接操作控件
             Me.progressBarSearch.Value = newPos
        Else
            ' 是的话启用delegate访问
            Dim showProgressDl As New ShowProgressDelegate(AddressOf ShowProgress)
            ' 如使用Invoke会等到函数调用结束,而BeginInvoke不会等待直接往后走
            Me.BeginInvoke(showProgressDl, New Object() {newPos})
        End If
    End Sub


Private Sub FrmLanPC_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBASE.Load
     Dim th As Thread = New Thread(AddressOf InitLanHost)
        th.IsBackground = False
        th.Name = "SearchLanPC"
        th.Start()  
    End Sub

private sub InITLanHost()
for i =0 as Integer to 100
   '...处理其实事务
   '用到委托来更新PrgsBar
    ShowProgress(i)
next
end sub


End Class