在事件/委托中使用Thread.Sleep无果,请指点?!
各位好:
最近在学习《C#2010图解教程》中的“事件”一章,并照着敲了一遍代码。
但是得到的结果和书中的结果不一样。。。。
先看代码:大体的框架很简单,就是生成一个我们自定义的事件MyElapsed,利用system.timers.timer中的公共事件Elapsed计时器,把触发自定义事件MyElapsed的私有方法OnOneSecond注册到公共事件Elapsed计时器上,这样我们自定义的事件MyElapsed也可以定时被触发。然后再把两个方法注册到MyElapsed上,实现定时输出。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace EventSample1
{
public class MyTimerClass //声明自定义类
{
public event EventHandler MyElapsed; //声明自定义的事件
//定义事件的触发代码
private void OnOneSecond(object source, EventArgs args)
{
if(MyElapsed != null)
MyElapsed(source, args); //触发事件
}
//----
private System.Timers.Timer MyPrivateTimer; //声明一个私有计时器
//构造函数
public MyTimerClass()
{
MyPrivateTimer = new System.Timers.Timer(); //实例化计时器
MyPrivateTimer.Elapsed += OnOneSecond; //将触发事件的私有方法注册到计时器的公共事件上
//设置公共事件的属性
MyPrivateTimer.Interval = 1000;
MyPrivateTimer.Enabled = true;
}
}
//提供订阅在自定义事件上的处理程序
class classA
{
public void TimerHandlerA(object source, EventArgs args)
{
Console.WriteLine("class A handler called!");
}
}
class classB
{
public static void TimerHandlerB(object source, EventArgs args)
{
Console.WriteLine("class B handler called!");
}
}
//主程序
class Program
{
static void Main()
{
classA ca = new classA();
MyTimerClass mc = new MyTimerClass();
//----
mc.MyElapsed += ca.TimerHandlerA;
mc.MyElapsed += classB.TimerHandlerB;
//----
Thread.Sleep(2250);
Console.ReadLine();
}
}
}
按照我们的理解,在线程sleep的2秒多时间内,MyElapsed事件会被触发2次,因此应该输出共4句语句后便停止在readline上了。书上也是这么说的。
但是实际运行的结果是:语句会不停的输出,如下:
不知道原因在什么地方?
请指教
我使用的是vs2010,winXp。。。。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这句话-“在线程sleep的2秒多时间内,MyElapsed事件会被触发2次”你是怎么得出来的?
这个问题,先要理解一下主程序是在干啥