1. 程式人生 > >C#中使用事件機制實現執行緒間的通訊

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 定義接受方法;