最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#中事件處理的個人體會

 更新時間:2006年12月27日 00:00:00   作者:  
作者: juky_huang 事件的簡單解釋:

事件是對象發(fā)送的消息,以發(fā)信號通知操作的發(fā)生。操作可能是由用戶交互(例如鼠標單擊)引起的,也可能是由某些其他的程序邏輯觸發(fā)的。引發(fā)(觸發(fā))事件的對象叫做事件發(fā)送方。捕獲事件并對其作出響應的對象叫做事件接收方。

在事件通信中,事件發(fā)送方類不知道哪個對象或方法將接收到(處理)它引發(fā)的事件。所需要的是在源和接收方之間存在一個媒介(或類似指針的機制)。.NET Framework 定義了一個特殊的類型(Delegate),該類型提供函數(shù)指針的功能。

與其他的類不同,委托類具有一個簽名,并且它只能對與其簽名匹配的方法進行引用。這樣,委托就等效于一個類型安全函數(shù)指針或一個回調(diào)。

C#中使用事件需要的步驟:

創(chuàng)建一個委托
將創(chuàng)建的委托與特定事件關(guān)聯(lián)(.Net類庫中的很多事件都是已經(jīng)定制好的,所以他們也就有相應的一個委托,在編寫關(guān)聯(lián)事件處理程序--也就是當有事件發(fā)生時我們要執(zhí)行的方法的時候我們需要和這個委托有相同的簽名)
編寫事件處理程序
利用編寫的事件處理程序生成一個委托實例
把這個委托實例添加到產(chǎn)生事件對象的事件列表中去,這個過程又叫訂閱事件
C#中事件產(chǎn)生和實現(xiàn)的流程:

定義A為產(chǎn)生事件的實例,a為A產(chǎn)生的一個事件
定義B為接收事件的實例,b為處理事件的方法
A由于用戶(程序編寫者或程序使用者)或者系統(tǒng)產(chǎn)生一個a事件(例如點擊一個Button,產(chǎn)生一個Click事件)
A通過事件列表中的委托對象將這個事件通知給B
B接到一個事件通知(實際是B.b利用委托來實現(xiàn)事件的接收)
調(diào)用B.b方法完成事件處理
下面給出《C#入門經(jīng)典》的例子,并做一定的解釋:

//====================Connection.cs===========
//事件定義,也就是上面提到的A
//============================================
using System;
using System.Timers;

namespace Ch12Ex02
{
/// <summary>
/// Connection 的摘要說明。
/// </summary>
/// 

public delegate void MessageHandler(string messageText);//創(chuàng)建一個委托---步驟1
public class Connection
{
public event MessageHandler MessageArrived;//將創(chuàng)建的委托和特定事件關(guān)聯(lián),在這里特定的事件為MessageArrived ---步驟2*/
/*上面這語句值得注意的地方是 MessageArrived方法被關(guān)聯(lián)到MessageHandler上后,以后消息的傳遞就通過MessageHandler這個委托來實現(xiàn),所以如果要能接收這個消息,就必須能支持MessageHandler這個委托,也就是要有一個和委托一樣的簽名 
private Timer pollTimer;
public Connection()
{
//
// TODO: 在此處添加構(gòu)造函數(shù)邏輯
//
pollTimer=new Timer(100);
pollTimer.Elapsed+=new ElapsedEventHandler(CheckForMessage);
}

public void Connect()
{
pollTimer.Start();
}

public void Disconnect()
{
pollTimer.Stop();
}

public void CheckForMessage(object sender,ElapsedEventArgs e)
{
Console.WriteLine("Check for message.");
Random random=new Random();
if((random.Next(9)==0)&&(MessageArrived!=null))
{
MessageArrived("Hello Mum!");//程序編寫者自己產(chǎn)生一個消息,消息的內(nèi)容為Hello Mum!
}
}
}
}

//====================Display.cs===========
//接收事件的類,也就是上面提到的B
//=========================================
using System;

namespace Ch12Ex02
{
/// <summary>
/// Display 的摘要說明。
/// </summary>
public class Display
{
public Display()
{
//
// TODO: 在此處添加構(gòu)造函數(shù)邏輯
//

}

public void DisplayMessage(string message) //a事件的最終處理函數(shù),即上面的B.b,在main函數(shù)中,我們會使用本函數(shù)實現(xiàn)一個委托實例,并且添加到A的MessageArrived事件列表中--步驟3
{
Console.WriteLine("Message Arrived:{0}",message);
}
}
}

//====================Class1.cs=================
//一個控制臺可執(zhí)行類,主要是使用上面兩個類的實例
//==============================================
using System;

namespace Ch12Ex02
{
/// <summary>
/// Class1 的摘要說明。
/// </summary>
class Class1
{
/// <summary>
/// 應用程序的主入口點。
/// </summary>
[STAThread]
static void Main(string[] args)
{
//
// TODO: 在此處添加代碼以啟動應用程序
//

Connection myConnection=new Connection();
Display myDisplay=new Display();
myConnection.MessageArrived+=new MessageHandler(myDisplay.DisplayMessage);//把委托添加到當前A的事件列表中----步驟4和步驟5

myConnection.Connect();
Console.ReadLine();
}
}
}

值得注意的代碼:
public delegate void MessageHandler(string messageText);//委托定義
public event MessageHandler MessageArrived;//定義一個事件,并且關(guān)聯(lián)到一個委托上
myConnection.MessageArrived+=new MessageHandler(myDisplay.DisplayMessage);//產(chǎn)生一個委托實例,并通過+=運算符號添加到事件列表中 +=運算符號在這里非常的有用 

 

相關(guān)文章

  • C#中異步是4種實現(xiàn)方式詳解

    C#中異步是4種實現(xiàn)方式詳解

    這篇文章主要為大家詳細介紹了C#中異步實現(xiàn)方式的相關(guān)知識,文中的示例代碼講解詳細,具有一定的借鑒價值,有需要的小伙伴可以跟隨小編一起學習一下
    2024-03-03
  • c# 以二進制讀取文本文件

    c# 以二進制讀取文本文件

    在當前目錄創(chuàng)建一個文件myfile.txt,對該文件具有讀寫權(quán)限
    2009-07-07
  • Winform界面中實現(xiàn)通用工具欄按鈕的事件處理方法

    Winform界面中實現(xiàn)通用工具欄按鈕的事件處理方法

    下面小編就為大家分享一篇Winform界面中實現(xiàn)通用工具欄按鈕的事件處理方法,具有很好的參考價值,希望對大家有所幫助
    2017-11-11
  • 舉例講解C#中自動實現(xiàn)的屬性

    舉例講解C#中自動實現(xiàn)的屬性

    這篇文章主要介紹了C#中自動實現(xiàn)的屬性,包括使用自動實現(xiàn)的屬性實現(xiàn)輕量類的方法,需要的朋友可以參考下
    2016-01-01
  • C#中單例的實現(xiàn)方法

    C#中單例的實現(xiàn)方法

    這篇文章主要介紹了C#中單例的實現(xiàn)方法,以實例形式分析了C#中單例的原理與實現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-01-01
  • C#彩色圖片灰度化算法實例

    C#彩色圖片灰度化算法實例

    這篇文章主要介紹了C#彩色圖片灰度化算法,以實例形式對灰度化算法進行了較為詳細的介紹,非常具有實用價值,需要的朋友可以參考下
    2014-10-10
  • C#自定義IP輸入框控件

    C#自定義IP輸入框控件

    這篇文章主要為大家詳細介紹了C#自定義IP輸入框控件,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • 詳解C#如何實現(xiàn)一個安全的事件訂閱器

    詳解C#如何實現(xiàn)一個安全的事件訂閱器

    事件訂閱器是一個對象,它訂閱(或監(jiān)聽)某個事件,并在事件發(fā)生時執(zhí)行相應的操作,本文主要介紹了C#實現(xiàn)一個安全的事件訂閱器的相關(guān)知識,感興趣的可以了解下
    2024-01-01
  • 結(jié)構(gòu)體和聯(lián)合體的區(qū)別及說明

    結(jié)構(gòu)體和聯(lián)合體的區(qū)別及說明

    文章主要介紹了C語言中的結(jié)構(gòu)體和聯(lián)合體,結(jié)構(gòu)體是一種自定義的復合數(shù)據(jù)類型,可以包含多個成員,每個成員可以是不同的數(shù)據(jù)類型,聯(lián)合體是一種特殊的數(shù)據(jù)結(jié)構(gòu),可以在內(nèi)存中共享同一段存儲空間來存儲不同類型的數(shù)據(jù)
    2025-01-01
  • C#中數(shù)組Array,ArrayList,泛型List詳細對比

    C#中數(shù)組Array,ArrayList,泛型List詳細對比

    關(guān)于數(shù)組Array,ArrayList,泛型List,簡單的說數(shù)組就是值對象,它存儲數(shù)據(jù)元素類型的值的一系列位置.Arraylist和list可以提供添加,刪除,等操作的數(shù)據(jù). 具體如何進行選擇使用呢,我們來詳細探討下
    2016-06-06

最新評論

奉节县| 吉木萨尔县| 会宁县| 朝阳县| 扬州市| 文成县| 沙河市| 乐陵市| 庄浪县| 巴东县| 互助| 威远县| 江西省| 霍城县| 丹东市| 建阳市| 砀山县| 马尔康县| 黑山县| 当阳市| 福建省| 靖西县| 金沙县| 茂名市| 余江县| 探索| 南投市| 永州市| 抚松县| 岐山县| 大埔县| 宣化县| 融水| 岗巴县| 永春县| 同仁县| 台江县| 郯城县| 永胜县| 汤原县| 华容县|