首页 > 学院 > 开发设计 > 正文

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();    }}

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表