C# 事件

Observer Pattern

觀察者模式(有時又被稱為發布/訂閱模式)是軟體設計模式的一種。

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

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

Sample:SimpleCrossThread

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

EAP
(Event-based Asynchronous Pattern)

因為時間的關係所以我只會使用EAP來演練

EAP 其實我們很常見

需要用+=來進行註冊,利如:this.button1.Click += new System.EventHandler(this.button1_Click);

實作 EventArgs

r

public class ConnectCompletedEventArgs : EventArgs { private bool _isConnected; public bool IsConnected { get { return _isConnected; } set { _isConnected = value; } } }

宣告 delegate

r

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

宣告 event

r

public event ConnectCompletedEventHandler ConnectCompleted;

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

r

protected virtual void OnConnect(ConnectCompletedEventArgs e){ if (ConnectCompleted != null) { ConnectCompleted(this, e); }}

使用內建 EventHandler<T> delegate

r

public event EventHandler<ConnectCompletedEventArgs> ConnectCompleted;

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

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

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

e 代表的是通知內容

APM
(Asynchronous Programming Model)

TAP
(Task-based Asynchronous Pattern)