一個事件的發生需要有觸發條件,如定時發生,鼠標點擊等,以及即將發生的事件本身,因此,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();    }}新聞熱點
疑難解答