上色

Code Block

2013年10月25日 星期五

[VB.Net] 執行緒參數的傳入與傳出

首先定義一個Class,並在其中定義該執行緒要執行的方法
Public Class Class1
    Public Event ShowMsg(ByVal text As String) '宣告事件,觸發該事件即可傳出參數
    Private sum As Integer '執行緒執行時傳入的參數

    Property Num As Integer '設成屬性存取
        Get
            Return sum
        End Get
        Set(value As Integer)
            sum = value
        End Set
    End Property

    Public Sub calcd() '該執行緒要執行的方法
        For I = 0 To 1000
            sum += I
            RaiseEvent aa(sum) '觸發事件
            Threading.Thread.Sleep(100)
        Next
    End Sub
End Class

接著新建一個該類別的執行個體,並設定要傳入的參數,接著設定事件的處理方式,啟動執行緒。

Public Class Form1

    Private Delegate Sub InvokeDelegate(ByVal text As String)
    Private t As Threading.Thread

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim c As Class1 = New Class1 '建立一個Class1的執行個體
        c.Num = 10 '設定要傳入的參數(也可在建立執行個體時以建構式設定)
        '新建一個執行緒,指向Class1的執行個體中要執行的方法(該方法必須為Public)
        t = New Threading.Thread(AddressOf c.calcd) 
        AddHandler c.ShowMsg, AddressOf ShowMsg '設定事件的處理方式,將事件指向Form1的ShowMsg()
        t.Start()
    End Sub

    Private Sub ShowMsg(ByVal text As String)
        '若呼叫端不是建立該控制項(Me)的執行緒,則以委派方式呼叫
        If Me.InvokeRequired Then
            Invoke(New InvokeDelegate(AddressOf ShowMsg), text)
        Else
            TextBox1.Text = text '顯示訊息
        End If
    End Sub

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        t.Abort()
    End Sub
End Class

如此一來,每一次執行緒觸發事件時都會指向Form1的ShowMsg(),藉此傳出參數

沒有留言:

張貼留言