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