在第一篇 委派其實很簡單(一)介紹了委派的基本應用

相信很多人也聽過  跨執行緒時,需要用委派來處理,由其針對會改變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/

arrow
arrow
    文章標籤
    委派
    全站熱搜
    創作者介紹
    創作者 Rh 的頭像
    Rh

    程式狂想曲

    Rh 發表在 痞客邦 留言(2) 人氣()