C 學習記錄(28)事件(1)

2021-08-21 05:36:19 字數 1716 閱讀 7977

一.事件的含義

事件類似於異常,因為它們都由物件引發(丟擲),我們可以提供**來處理事件。但它們也有幾個重要的區別。最重要的區別是並沒有與try ... catch 類似的結構來處理事件,而必須訂閱(subscribe)它們。訂閱乙個事件的含義是提供**,在事件發生時執行這些**,它們稱為事件處理程式。

基本處理過程如下所示:

(1)應用程式建立乙個可以引發事件的物件。例如,假定乙個即時訊息傳送(instant messaging)應用程式建立的物件表示乙個遠端使用者的連線。當接收到通過該連線從遠端使用者傳送來的資訊時,這個連線物件會引發乙個事件。

(2)應用程式訂閱事件。為此,即時訊息傳送應用程式將定義乙個方法,該方法可以與事件指定的委託型別一起使用,把這個方法的乙個引用傳送給事件,而事件的處理方法可以是另乙個物件的方法,假定是表示顯示裝置的物件,當接收到資訊時,該方法將顯示即時訊息。

(3)引發事件後,就通知訂閱器。當接收到通過連線物件傳來的即時訊息時,就呼叫顯示裝置物件上的事件處理方法。因為我們使用的是乙個標準方法,所以引發事件的物件可以通過引數傳送任何相關的資訊,這樣就大大增加了事件的通用性。

二.快速入門

timer.elapsed 事件的委託包含了事件處理程式中常見的兩類引數,如下所示:

 object source——引發事件的物件的引用

 elapsedeventargs e——由事件傳送的引數

static int counter = 0;

static void main(string args)

/// /// 自定義事件

///

///

/// elapsedeventargs只用在timer.elapsed事件處理函式中,為事件處理提供資料。

static void writechar(object source, elapsedeventargs e)

3.簡單事件處理程式

第一步:定義事件處理程式

private void checkformessage(object source, elapsedeventargs e)

第二步:註冊事件的處理程式

private timer polltimer;

public connection()///建構函式

{polltimer = new timer(100); 

polltimer.elapsed += new elapsedeventhandler(checkformessage);  ///註冊elapsed事件的乙個事件處理程式

///該事件是按定時器到時間來觸發的,即開啟計時後,每100ms就會觸發一次。

第三步:啟動事件觸發程式

myconnection.messagearrived += new messagehandler(mydisplay.displaymessage) ;

C 學習記錄(1)

namespace 命名空間 using 宣告 如果在乙個空間中,兩個變數或函式的名字一樣,編譯的時候會衝突。命名空間就是為了解決c 中函式變數的命名衝突所採取的一種措施,能夠解決多模組協同開發出現變數函式命名的衝突問題。在這裡面可以把命名空間理解成資料夾,如果你在hel1這個資料夾中編輯兩個hel...

C 語言學習記錄 28 靜態成員

使用靜態成員的目的是為了實現資料之間的共享,使用全域性變數可以實現資料共享,但是全域性變數具有其侷限性,因此主要通過使用類的靜態成員進行資料的共享。在類中的靜態成員可以實現多個該類的物件之間的資料共享,在實現共享的同時還保證了資料的安全性,不會被外部成員訪問.因此,乙個類的靜態成員是所有該類的物件的...

C 學習記錄(12)函式(1)

函式在c語言中的概念是模組化程式設計,將某個功能封裝成乙個函式,可以被重複呼叫。1.定義,宣告和使用函式 static void write static void main return sum static void main sum static void showdouble ref int...