近来在学习Eugene Agafonov编写的《C#多线程编程实战》(译),做些笔记也顺便分享一下^-^
using System;
using System.Threading;
namespace 使用计时器
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Press 'Enter' to stop the timer...");
DateTime start = DateTime.Now;
_timer = new Timer(_ => TimerOperation(start), null, TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(2));
Thread.Sleep(TimeSpan.FromSeconds(6));
_timer.Change(TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(4));
Console.ReadLine();
_timer.Dispose();
Console.ReadKey();
}
static Timer _timer;
static void TimerOperation(DateTime start)
{
TimeSpan elapsed = DateTime.Now - start;
Console.WriteLine("{0} seconds from {1}.Timer thread pool thread id:{2}", elapsed.Seconds, start, Thread.CurrentThread.ManagedThreadId);
}
}
}
程序的运行结果如下:
我们首先创建了一个Timer实例。第一个参数是一个lambda表达式,将会在线程池中被执行。我们调用TimerOperation方法并给其提供一个起始时间。由于无须使用用户状态对象,所以第二个参数为null。然后指定了什么时候会第一次运行TimerOperation,以及之后再次调用的间隔时间。所以第一个值实际上说明一秒会启动第一次操作,然后每隔两秒再次运行。
之后等待6秒后修改计时器。在调用_timer.Change方法一秒后启动TimerOperation,然后每隔4秒再次运行。
最后等待回车键被按下以结束整个应用程序。在程序运行过程中可以看到自从程序启动后经历的时间。