分类
编程

VB.Net 多线程又一方式-使用事件

之前写过一篇使用托管的方式实现多线程。今天再介绍一种方法,可以使用事件来达到目的。

首先,你需要两个类。一个自定义类,一个是主线程所在的类。

首先,是自定义类:

Public Class Wrench
    '新建一个事件
    Public Event DoneLoading(ByVal Param As String)

    '如果在多线程中需要传递参数,可以使用类的属性
    Private _PARAM As String
    Public Property Param As String
        Get
            Return _PARAM
        End Get
        Set(value As String)
            _PARAM = value
        End Set
    End Property

    '接下类这个方法是在新线程里执行的
    Public Sub Loading()
        '这个变量相当于新线程的返回值
        Dim RTN As String = ""
        '触发事件
        RaiseEvent DoneLoading(RTN)
    End Sub

    '类的构造函数省略...

End Class

接下来,在主线程里:

'全局声明自定义类为可接受事件
Private WithEvents OmniWrench As New Wrench

'这个方法用于启动线程
Sub Main()
    '新建线程
    Dim thNew As New System.Threading.Thread(AddressOf OmniWrench.Loading)
    '使用属性传递参数
    OmniWrench.Param = "ABC"
    '启动线程
    thNew.Start()
End Sub

'这个方法用于处理线程执行完触发的事件。形参strParam即为线程返回的值。
Public Sub DoneLoadingHandler(ByVal strParam As String) Handles OmniWrench.DoneLoading
        '使用Lambda表达式新建一个委托,以进行UI更改。
        Me.Dispatcher.Invoke(New Action(Sub()
                                            '这里的语句可以直接操控UI。当然也可以不新建这个委托,也就不能对UI进行更改了。
                                        End Sub))
End Sub

 

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注