2012年12月5日 星期三
Multithreading 初體驗
程式長時間執行時想中斷程式,會發現介面完全無法操作,
採用 Multithreading 可以解決這個問題,
以下是簡單的範例 ... 中斷無限迴圈
Imports System.Threading
Public Class Form1
Dim Thread_A As Thread = Nothing
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Thread_A = New Thread(New ThreadStart(AddressOf Me.ThreadAsub))
Thread_A.IsBackground = True
Thread_A.Start()
End Sub
Private Sub ThreadAsub()
Dim c_ID As String
Dim x As Integer = 0
c_ID = Thread.CurrentThread.GetHashCode() ' 這行可取得 Thread ID
update(c_ID, TextBox1)
Do Until x = 1
update("測試字串", TextBox2) '無限迴圈寫入字串
Loop
End Sub
' 因為 Thread_A 跟操作介面是不同的 Thread,無法直接寫入TextBox,
改採以下的寫法就可以順利運作
Private Delegate Sub updateX(ByVal MyText As String, ByVal c As Control)
Private Sub update(ByVal MyText As String, ByVal c As Control)
If Me.InvokeRequired() Then
Dim cb As New updateX(AddressOf update)
Me.Invoke(cb, MyText, c)
Else
If c.Name = "TextBox1" Then
c.Text = MyText
ElseIf c.Name = "TextBox2" Then
TextBox2.AppendText(MyText & vbCr)
End If
End If
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Thread_A.Abort() ' 中斷程式
End Sub
End Class