Категории: Все - 方法

по 余小章 's 7 лет назад

621

C# 事件

在C#編程中,非同步模型有三種主要形式:APM、TAP和EAP。APM是一種較為傳統的非同步模型,使用Begin和End前綴來管理非同步操作。TAP運用async和await關鍵字,使非同步程式設計更為簡單和高效,這大大減少了開發成本。EAP則通過事件處理的方式來實現非同步操作,使用On開頭的方法體來定義事件處理邏輯,並且需要使用+=來註冊事件。這種模式在真實世界中的應用非常廣泛,尤其是在跨執行緒更新UI時顯得尤為重要。

C# 事件

C# 事件

真實世界的應用 三種非同步模型

TAP (Task-based Asynchronous Pattern)
LINQPad Samples:Asynchronous Functions in C#
欲知詳情,請在google搜尋"余小章 TAP"
Async 為後綴詞的方法,搭配 async / await 關鍵字,讓開發人員大大減少了開發非同步的成本。
APM (Asynchronous Programming Model)
欲知詳情,請在google搜尋"余小章 APM"
前綴帶有Beginxxx,Endxxx,如:FileStream.BeginRead
EAP (Event-based Asynchronous Pattern)
使用內建 EventHandler delegate

public event EventHandler<ConnectCompletedEventArgs> ConnectCompleted;

e 代表的是通知內容

sender代表的是觸發事件的來源物件

public delegate void EventHandler(object sender, TEventArgs e);

EventHandler 就是傳入兩個參數,object,TEventArgs 沒有回傳值的委派

定義 On 開頭的前綴詞方法體

protected virtual void OnConnect(ConnectCompletedEventArgs e)

{

if (ConnectCompleted != null)

{

ConnectCompleted(this, e);

}

}

宣告 event

public event ConnectCompletedEventHandler ConnectCompleted;

宣告 delegate

public delegate void ConnectCompletedEventHandler(object sender, ConnectCompletedEventArgs e);

實作 EventArgs

public class ConnectCompletedEventArgs : EventArgs

{

private bool _isConnected;

public bool IsConnected

{

get { return _isConnected; }

set { _isConnected = value; }

}

}

需要用+=來進行註冊,利如:this.button1.Click += new System.EventHandler(this.button1_Click);
EAP 其實我們很常見
因為時間的關係所以我只會使用EAP來演練

真實世界的應用 跨執行緒更新UI

Sample:SimpleCrossThread

Observer Pattern

在此種模式中,一個目標物件管理所有相依於它的觀察者物件,並且在它本身的狀態改變時主動發出通知。這通常透過呼叫各觀察者所提供的方法來實現。此種模式通常被用來實作事件處理系統。
觀察者模式(有時又被稱為發布/訂閱模式)是軟體設計模式的一種。