如果Timer的回调方法的执行时间很长,计时器可能在上个回调方法还没有完成的时候再次触发,如果我们只是想让一个回调方法执行完后再执行下一个回调方法,可以这样:
private static Timer s_timer; static void Main(string[] args) { s_timer = new Timer(ComputeBoundOp, 5, 0, Timeout.Infinite);//为period参数指定Timeout.Infinite,这样计时器只触发一次 Console.ReadKey(); } private static void ComputeBoundOp(Object state) { Console.WriteLine("In ComputeBoundOp:state={0}", state); Thread.Sleep(3000); s_timer.Change(2000, Timeout.Infinite);//为dueTime指定下次调用回调方法所需要等待的时间 }