class App
{
public static void Main()
{
Console.WriteLine("每2秒执行一次时钟事件");
TimerCallback callback = new TimerCallback(App.CheckStatus);
Timer timer1 = new Timer(callback , null ,1000 ,2000);
AutoResetEvent firstTimerFired = new AutoResetEvent(false);
State state = new State(2,firstTimerFired);
Timer timer2 = new Timer(callback ,state , 5000 ,0);//定时器事件只触发一次,period为0
firstTimerFired.WaitOne();
Console.WriteLine("按回车继续...");
Console.ReadLine();
timer2.Change(2000,1000);
Console.WriteLine("按回车继续...");
Console.ReadLine();
timer1.Dispose();
timer2.Dispose();
}
static void CheckStatus(object state)
{
if (state !=null)
{
((State)state).Show();
if(((State)state).FirstTimerFired != null)
((State)state).FirstTimerFired.Set();
}
else
{
Console.WriteLine("tread.HashCode = {0}\tthreadID={1}在工作",Thread.CurrentThread.GetHashCode(),-1);
}
}
}
4、System.Timers.Timer
基于服务器的计时器的关键编程元素
Timer 组件引发一个名为 Timer.Elapsed 的事件。您可以为这个事件创建处理程序来执行处理要发生的一切。
Timer 组件的一些更重要的属性和方法还包含:
Interval 属性用来设置引发事件的时间范围,以毫秒计。例如,值为 1000 的时间间隔将一秒钟引发一次事件。
AutoReset 属性决定在给定时间间隔过去之后计时器是否继续引发事件。如果设置成 true,计时器继续重新计算时间间隔并引发事件。如果为 false,它在时间间隔过去后只引发一次事件,然后停止。
Start 方法将计时器的 Enabled 属性设置为 true,它允许计时器开始引发事件。如果计时器已经是启用状态,则调用 Start 方法将重置该计时器。
Stop 方法将计时器的 Enabled 属性设置成 false,以防止计时器再引发事件。
A.创建System.Timers.Timer对象kicker
B.设置周期
C.设置AutoReset为true
D.设置kicker的Elapsed事件
E.启动kicker
F.如果需要,可以重新设置kicker的Interval属性
G.停止记时器
using System;
using System.Timers;
using System.Threading;
class App
{
private static DateTime stopTime = new DateTime(2005,4,2);
static void ElapsedHandler(object sender , ElapsedEventArgs e)
{
if (DateTime.Compare(e.SignalTime , stopTime) > 0 )
{
Console.WriteLine("Thread {0} 处理定事事件",Thread.CurrentThread.GetHashCode());
Thread.Sleep(100);
}
}
static public void Main()
{
System.Timers.Timer kicker = new System.Timers.Timer();
kicker.Interval =1000;
kicker.AutoReset = true;
kicker.Elapsed += new ElapsedEventHandler(ElapsedHandler);
kicker.Start();
Thread.Sleep(2100);
Console.WriteLine("改变时间间隔");
kicker.Interval = 2000;
Thread.Sleep(2100);
Console.WriteLine("结束定事器");
//kicker.Stop();
stopTime = DateTime.Now;
Thread.Sleep(2100);
Console.WriteLine("重新启动定事器");
kicker.Start();
Thread.Sleep(8100);
Console.WriteLine("按任意键退出");
//Console.ReadLine();
//Thread.Sleep(14100);
kicker.Stop();
stopTime = DateTime.Now;
}
}