1、訂閱處理事件
(1)首先定義一個事件處理常式方法,其簽名與該事件的委託簽名必須匹配。例如,本例中事件基於 WebBrowserDocumentCompletedEventHandler 委託類型,則下面的代碼定義了對應的事件處理函數:
void HandleDocumentCompletedEvent(object sender, WebBrowserDocumentCompletedEventArgs e)<br /> {<br /> // Do something useful here.<br /> }
處理 WebBrowser.DocumentCompleted 事件,在新文檔完成載入時接收通知。傳遞到事件處理常式的 WebBrowserDocumentCompletedEventArgs 對象使您能通過 Url 屬性檢索新文檔的位置。如果 WebBrowser.DocumentCompleted 事件發生,則新文檔已完全載入,這意味著可以通過 WebBrowser.Document、WebBrowser.DocumentText 或 WebBrowser.DocumentStream 屬性訪問該文檔的內容。
(2)使用加法賦值運算子 (+=) 來為事件附加事件處理常式。
webBrowser1. DocumentCompleted += HandleDocumentCompletedEvent;
注意,上面的執行個體採用的是 C# 2.0 中的新文法。此文法完全等效於必須使用 new 關鍵字顯式建立封裝委託的 C# 1.0 文法:
webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(HandleDocumentCompletedEvent);
2、取消訂閱事件
要防止在引發事件時呼叫事件處理常式,請取消訂閱該事件。要防止資源流失,應在釋放訂戶對象之前取消訂閱事件。在取消訂閱事件之前,在發布對象中作為該事件的基礎的多路廣播委託會引用封裝了訂戶的事件處理常式的委託。只要發布對象保持該引用,記憶體回收功能就不會刪除訂戶對象。
使用減法賦值運算子 (-=) 取消訂閱事件:
webBrowser1.DocumentCompleted –= HandleDocumentCompletedEvent; //c#2.0文法 </p><p>webBrowser1.DocumentCompleted -= new WebBrowserDocumentCompletedEventHandler(HandleDocumentCompletedEvent); //c#1.0文法<br />
3、匿名訂閱事件
如果以後不必取消訂閱某個事件,則可以使用加法賦值運算子 (+=) 將匿名方法附加到此事件。在下面的樣本中,假設名為 publisher 的對象擁有一個名為 RaiseCustomEvent 的事件,並且還定義了一個 CustomEventArgs 類以承載某些類型的專用事件資訊。
publisher.RaiseCustomEvent += delegate(object o, CustomEventArgs e)<br /> {<br /> string s = o.ToString() + " " + e.ToString();<br /> Console.WriteLine(s);<br /> };
注意,如果使用匿名函數訂閱事件,事件的取消訂閱過程將比較麻煩。這種情況下若要取消訂閱,必須返回到該事件的訂閱代碼,將該匿名方法儲存在委託變數中,然後將此委託添加到該事件中。一般來說,如果必須在後面的代碼中取消訂閱某個事件,則建議您不要使用匿名函數訂閱此事件。