国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Events基本概念----Beginning Visual C#

2019-11-17 02:43:39
字體:
來源:轉載
供稿:網友

Events基本概念----Beginning Visual C#

一個事件的發生需要有觸發條件,如定時發生,鼠標點擊等,以及即將發生的事件本身,因此,events相關的最簡單的示例如下:

// 時間觸發器class TimerTrigger{    PRivate Timer myTimer;    public TimerTrigger()     {        myTimer = new Timer(100);    }        public TimerTrigger(int timeInterval)    {        myTimer = new Timer(timeInterval);    }    // 向時間觸發器添加具事件的handler    public void AddEventHander(ElapsedEventHandler source)    {        myTimer.Elapsed += source;    }    public void Start()    {        myTimer.Start();    }    public void Stop()    {        myTimer.Stop();    }}class Program{    static int counter = 0;    static string displayString =         "This string will appear one letter at a time. ";    // 即將被添加到時間觸發器的事件    static void WriteChar(object source, ElapsedEventArgs e)    {        Console.Write(displayString[counter++ % displayString.Length]);    }    public static void Main()    {        TimerTrigger timerTrigger = new TimerTrigger(100);        timerTrigger.AddEventHander(new ElapsedEventHandler(WriteChar));        timerTrigger.Start();        Console.ReadLine();    }}

在上面的例子的main函數中,直接使用了c#自帶的ElapsedEventHandler delegated類型,那么如何自定義事件處理函數呢?具體如下:

// 自定義時間處理代表public delegate void MessageHandler(string message);class TimerTrigger{    private Timer myTimer;    private event MessageHandler MessageArrived;    public TimerTrigger(int timeInterval)    {        myTimer = new Timer(timeInterval);        myTimer.Elapsed += new ElapsedEventHandler(CheckForMessage);    }    public void AddEventHandler(MessageHandler source)    {        MessageArrived += source;     }    public void Start()    {        myTimer.Start();    }    public void Stop()    {        myTimer.Stop();    }    private void CheckForMessage(object source, ElapsedEventArgs e)    {        Console.WriteLine("Checking for new messages.");        if (MessageArrived != null)        {            MessageArrived("hello world");        }    }}class Program{    static int counter = 0;    static void WriteFirstMessage(string message)    {        Console.WriteLine("The First {0} number: {1}", message, counter++);    }    static void WriteSecondMessage(string message)    {        Console.WriteLine("The Second {0} number: {1}", message, counter++);    }    public static void Main()    {        TimerTrigger timerTrigger = new TimerTrigger(100);        timerTrigger.AddEventHandler(new MessageHandler(WriteFirstMessage));        timerTrigger.AddEventHandler(new MessageHandler(WriteSecondMessage));        timerTrigger.Start();        Console.ReadLine();    }}

在上述的例子中,將消息傳遞給處理事件所用的函數為WriteFirstMessage(string message),其傳遞的參數為string類型的。再考慮道<Timer>.ElapsedEventHandler所代表的函數的傳遞參數為:(object source, ElapsedEventArgs e)兩個參數,那么我們能否實現類似的形式呢?這是可以的,如下:

public class MessageArrivedEventArgs : EventArgs{    private string message;    public string Message    {        get        {            return message;        }    }    public MessageArrivedEventArgs()    {        message = "No message sent.";    }    public MessageArrivedEventArgs(string newMessage)    {        message = newMessage;    }}         public delegate void MessageHandler(TimerTrigger source,    MessageArrivedEventArgs e);public class TimerTrigger{    private Timer myTimer;    private event MessageHandler MessageArrived;    public TimerTrigger(int timeInterval)    {        myTimer = new Timer(timeInterval);        myTimer.Elapsed += new ElapsedEventHandler(CheckForMessage);    }    public void AddEventHandler(MessageHandler source)    {        MessageArrived += source;     }    public void Start()    {        myTimer.Start();    }    public void Stop()    {        myTimer.Stop();    }    private void CheckForMessage(object source, ElapsedEventArgs e)    {        Console.WriteLine("Checking for new messages.");        if (MessageArrived != null)        {            MessageArrived(this, new MessageArrivedEventArgs("hello world"));        }    }}class Program{    static int counter = 0;    static void WriteFirstMessage(TimerTrigger source, MessageArrivedEventArgs e)    {        Console.WriteLine("The First {0} number: {1}", e.Message, counter++);    }    static void WriteSecondMessage(TimerTrigger source, MessageArrivedEventArgs e)    {        Console.WriteLine("The Second {0} number: {1}", e.Message, counter++);    }    public static void Main()    {        TimerTrigger timerTrigger = new TimerTrigger(100);        timerTrigger.AddEventHandler(new MessageHandler(WriteFirstMessage));        timerTrigger.AddEventHandler(new MessageHandler(WriteSecondMessage));        timerTrigger.Start();        Console.ReadLine();    }}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 浦东新区| 奉化市| 微山县| 蛟河市| 绥宁县| 松桃| 丹寨县| 吴忠市| 奉新县| 蓬莱市| 广南县| 扎兰屯市| 德阳市| 宜宾市| 新泰市| 河津市| 高尔夫| 平江县| 镇赉县| 勃利县| 方山县| 金塔县| 永泰县| 报价| 资兴市| 兴海县| 诸暨市| 资中县| 金沙县| 民和| 新余市| 舞钢市| 山西省| 曲松县| 江达县| 错那县| 石嘴山市| 山东省| 西乡县| 常州市| 平顶山市|