事件學習

咱們知道要建立一個事件驅動的程序須要下面的步驟:函數

1.         聲明關於事件的委託;post

2.         聲明事件;this

3.         編寫觸發事件的函數;spa

4.         建立事件處理程序;code

5.         註冊事件處理程序;blog

6.         在適當的條件下觸發事件。 事件

如今咱們來編寫一個自定義事件的程序。主人養了一條忠實的看門狗,晚上主人睡覺的時候,狗負責看守房子。一旦有小偷進來,狗就發出一個Alarm事件,主人接到Alarm事件後就會採起相應的行動。假設小偷於2009年元旦午夜時分到達。string

複製代碼
//事件發送者
class Dog
{
    //1.聲明關於事件的委託;
    public delegate void AlarmEventHandler(object sender, EventArgs e);

    //2.聲明事件;   
    public event AlarmEventHandler Alarm;

    //3.編寫引起事件的函數;
    public void OnAlarm()
    {
        if (this.Alarm != null)
        {
            Console.WriteLine("\n狗報警: 有小偷進來了,汪汪~~~~~~~");
            this.Alarm(this, new EventArgs());   //發出警報
         }
    }
}

//事件接收者
class Host
{
    //4.編寫事件處理程序
    void HostHandleAlarm(object sender, EventArgs e)
    {
        Console.WriteLine("主  人: 抓住了小偷!");
    }

    //5.註冊事件處理程序
    public Host(Dog dog)
    {
        dog.Alarm += new Dog.AlarmEventHandler(HostHandleAlarm);
    }
}

//6.如今來觸發事件
class Program
{
    static void Main(string[] args)
    {
        Dog dog = new Dog();
        Host host = new Host(dog);

        //當前時間,從2008年12月31日23:59:50開始計時
        DateTime now = new DateTime(2008, 12, 31, 23, 59, 50);
        DateTime midnight = new DateTime(2009, 1, 1, 0, 0, 0);

        //等待午夜的到來
        Console.WriteLine("時間一秒一秒地流逝... ");
        while (now < midnight)
        {
            Console.WriteLine("當前時間: " + now);
            System.Threading.Thread.Sleep(1000);   //程序暫停一秒
            now = now.AddSeconds(1);                //時間增長一秒
         }



        //午夜零點小偷到達,看門狗引起Alarm事件
         Console.WriteLine("\n月黑風高的午夜: " + now);
        Console.WriteLine("小偷悄悄地摸進了主人的屋內... ");
        dog.OnAlarm();
    }
}   
複製代碼

 

當午夜時分小偷到達時,dog調用dog.OnAlarm()函數,從而觸發Alarm事件,因而系統找到並執行了註冊在Alarm事件中的事件處理程序HostHandleAlarm()。it

事件處理委託習慣上以EventHandler結尾,好比AlarmEventHandler。事件Alarm其實是事件 處理委託AlarmEventHandler的一個實例。引起事件的代碼經常被編寫成一個函數,.NET約定這種函數的名稱爲 「OnEventName」,好比OnAlarm()的函數。在Host類中,咱們定義了事件處理程序HostHandleAlarm(),並把它註冊到 dog.Alarm事件中。event

 

事件處理程序的參數應該和事件委託相同。通常狀況下,事件處理程序接受兩個參數,一個是事件的發送者sender,一個是事件參數e[①]。事件參數用於在發送者和接收者之間傳遞信息。

相關文章
相關標籤/搜索