您的位置首页生活百科

举例讲解:EventHandler?委托?

举例讲解:EventHandler?委托?

给你一个类,我刚写了做示例的。加了足量的注释,希望你能看懂你可以自行测试,测试方法:ExampleClass ec = new ExampleClass();测试的效果就是,当这个类创建十秒钟后会弹出个对话框。--------------------------------------public class ExampleClass { //这是类的构造函数,我们在这里订阅事件 public ExampleClass() { //在这里,我们创建一个 EventClass EventClass ec = new EventClass(); //然后我们设置订阅它的 MyEventDelegate 这个 EventHandler ec.MyEventDelegate = new EventHandler(EventFunction); } ///

/// 这个就是 EventHandler 的具体函数了,可以发现,它的参数和返回类型都是和 /// EventHandler 的定义是一样的。所以在上面,可以创建一个 EventHandler 类型的委托: /// ec.MyEventDelegate = new EventHandler(EventFunction); /// /// /// void EventFunction(object sender, EventArgs e) { System.Windows.Forms.MessageBox.Show("已经被调用了,说明十秒钟过去了!", "提醒漏物友", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Information); } } /// /// 这是测试类,这个类会引发事件。 /// 这里作为简化,并未使用事件,而是直接使用了委托 /// public class EventClass { /// /// 这里使用了C#3.0的自动属性写法,实际上是一个类型为EventHandler的属性 /// 它的意思是,我们这里接收一个类型为 EventHandler 的事件订阅 /// public EventHandler MyEventDelegate { get; set; } /// /// 这里是构造函数 /// public EventClass() { //我们创建一个定时器 System.Timers.Timer timer = new System.Timers.Timer(); //然后设定周期为10秒钟。意味着十秒钟后这个定时器会触发事件 timer.Interval = 10000; //订阅timer的Tick事件。当十秒钟后,这个事件会被触发,我们订阅它 timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed); //最后我们启动这个定时器 timer.Start(); } /// /// 订阅Timer的过时时间。当Timer满足指定的要求的时候,这个蚂芦会被触发。 /// /// /// void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { //在这里,十秒钟已经返槐过去了。我们要做的事情,一是让timer停下来不在计时 //这里的sender是发送这个事件的源对象,在这里当然就是那个定时器了 ((System.Timers.Timer)sender).Stop(); //这里需要检查 MyEventDelegate 是否有人订阅了,如果没有,它就是 null //如果有,那么我们就调用它。 if (MyEventDelegate != null) { MyEventDelegate(this, new EventArgs()); } } }