在第一篇 委派其實很簡單(一)介紹了委派的基本應用
相信很多人也聽過 跨執行緒時,需要用委派來處理,由其針對會改變Form表單上得資料時,更是必要
首先讓我們來做些小小的改變
在 TimerClock 的Class 我們把Timer的宣告做了改變
由原先的 System.Windows.Forms.Timer
改成 System.Timers.Timer
當然 Click 的觸發就要更著改成 Elapsed
當F5 執行的時候 就會出現大大的 跨執行序錯誤的 標示,這應該是每個人在寫多執行緒時 最討厭的錯誤
這時把上一篇的觀念做些更改 由原先的 電台 與 收音機 的做法 改成 網路 傳輸的觀念
由發送端 一直發送資料 ,接收端 接收資料
當接收端來不及處理資料時,通常在硬體上就會有塊 Buffer,來做緩衝
現在我們也是如此 用 Delegate 製做出一個緩衝的區域
然後用 BegInvoke 將接收到的資料 存到歡衝區域 準備執行
以下就是程式碼
Public Class Form1
Dim clock As New TimerClock '建立一個新的 TimerClock
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
AddHandler clock.ReportTime, AddressOf getTime '建立接收的天線
End Sub
Public Delegate Sub showTime(ByVal sander As DateTime) '建立一個緩衝的執行區域
Private Sub getTime(ByVal sender As DateTime, ByVal e As System.EventArgs)
Me.BeginInvoke(New showTime(AddressOf doShowTime), sender) '將接收的資料先送到緩衝區域
End Sub
Public Sub doShowTime(ByVal sender As DateTime)
Label1.Text = sender.ToString("yyyy/MM/dd HH:mm:ss") '將接收的資料播放出來
End Sub
End Class
至於 Invoke 與 BeginInvoke的比較 已經有很好的文章,就不在這亂寫,避免擾亂大家
歡迎參考 http://blog.163.com/kjpt126@126/blog/static/48940426200824103658846/