.Net 以WebBrowser.DocumentCompleted 事件爲例,說明用C#如何完成事件的訂閱處理

1、訂閱處理事件
      (1)首先定義一個事件處理程序方法,其簽名與該事件的委託簽名必須匹配。例如,本例中事件基於 WebBrowserDocumentCompletedEventHandler 委託類型,則下面的代碼定義了對應的事件處理函數: 

  void HandleDocumentCompletedEvent(object sender, WebBrowserDocumentCompletedEventArgs e)
  {
     // Do something useful here.
  }
      處理 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語法 
webBrowser1.DocumentCompleted -= new WebBrowserDocumentCompletedEventHandler(HandleDocumentCompletedEvent);   //c#1.0語法 
  
3、匿名訂閱事件
      如果以後不必取消訂閱某個事件,則可以使用加法賦值運算符 (+=) 將匿名方法附加到此事件。在下面的示例中,假設名爲 publisher 的對象擁有一個名爲 RaiseCustomEvent 的事件,並且還定義了一個 CustomEventArgs 類以承載某些類型的專用事件信息。 
 
  publisher.RaiseCustomEvent += delegate(object o, CustomEventArgs e)
  {
    string s = o.ToString() + " " + e.ToString();
    Console.WriteLine(s);
  };
      注意,如果使用匿名函數訂閱事件,事件的取消訂閱過程將比較麻煩。這種情況下若要取消訂閱,必須返回到該事件的訂閱代碼,將該匿名方法存儲在委託變量中,然後將此委託添加到該事件中。一般來說,如果必須在後面的代碼中取消訂閱某個事件,則建議您不要使用匿名函數訂閱此事件。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章