C#中使用事件機制實現線程間的通信

在圖形界面中的運用程序中,通常是主線程負責UI人機交互,而將需要循環執行和耗資源的邏輯代碼和複雜的業務實現以及數據交互放到單獨一個線程裏運行。這樣可以保證主線程UI可以正常進行人機交互。
而線程之間的數據交互,就涉及了線程通信。這裏將通過一個給MCU升級固件程序的IAP(在應用編程)的一個用C#寫的上位機軟件的實現原理,來說明如何通過事件的機制來實現線程之間的通信。

關於事件和委託的概念
事件(Event)用於進程間通信。
委託(Delegate)是存有對某個方法的引用的一種引用類型變量。引用可在運行時被改變。

通過事件使用委託
事件在類中聲明且生成,且通過使用同一個或其他類中的委託與事件處理程序關聯。這被稱爲 發佈器(publisher) 類。其他接受該事件的類被稱爲 訂閱器(subscriber) 類。事件使用 發佈-訂閱(publisher-subscriber) 模型。

發佈器(publisher) 是一個包含事件和委託定義的對象。事件和委託之間的聯繫也定義在這個對象中。發佈器(publisher)類的對象調用這個事件,並通知其他的對象。
訂閱器(subscriber) 是一個接受事件並提供事件處理程序的對象。在發佈器(publisher)類中的委託調用訂閱器(subscriber)類中的方法(事件處理程序)。

                                            線程使用事件通信的基本流程

這裏寫圖片描述

這是實現了線程間的基於事件機制的通信了。當然線程之間的通信出了事件,還有類似信號量,互斥鎖,共享內存,消息隊列等。而具體是使用哪一種,則是需要根據實際業務需求來選擇。

具體代碼:
public delegate void —DataHandler(object o,數據類 data);
public event —DataHandler 定義接受方法;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章