我在项目中使用了两个System.Windows.Forms.Timer
对象,如下所示。
private void Form1_Load(object sender, EventArgs e)
{
timer1.Interval = 60000;
timer2.Interval = 62000;
timer1.Start();
}
private void timer1_Tick(object sender, EventArgs e)
{
Console.WriteLine("Timer1 :" + DateTime.Now.ToString());
timer2.Start();
}
private void timer2_Tick(object sender, EventArgs e)
{
Console.WriteLine("Timer2 :" + DateTime.Now.ToString());
timer2.Stop();
}
输出结果为:
Timer1 :05/30/2011 12:15:57 AM (12:16:59)
Timer1 :05/30/2011 12:16:57 AM (12:17:59) miss
Timer2 :05/30/2011 12:16:59 AM
Timer1 :05/30/2011 12:17:57 AM (12:18:59)
Timer1 :05/30/2011 12:18:57 AM (12:19:59) miss
Timer2 :05/30/2011 12:18:59 AM
Timer1 :05/30/2011 12:19:57 AM (12:20:59)
Timer1 :05/30/2011 12:20:57 AM (12:21:59) miss
Timer2 :05/30/2011 12:20:59 AM
我无法理解为什么timer2的timer1每次都缺少一次。
我的意思是Timer2应该在12:17:59开始,Timer1从上午12:16:57开始。
如何更改它以获得正确的算法?
答案 0 :(得分:5)
我不确定你为什么要这样做,但它正如你设计的那样工作。当timer1滴答时,它会输出一条消息并打开timer2。然后timer1再次打勾,但是timer2已经打开,所以没有任何反应。然后timer2滴答并关闭。这就是为什么你为每个timer2获得两个timer1s。第二次尝试打开Timer2时,Timer2已经在运行。
如果你真的想让它正常工作,你可能需要添加第三个计时器,然后在两者之间交替。检查timer2是否正在运行,如果是,则启动timer3。否则启动timer2。
答案 1 :(得分:3)
Timer.Start()
,则 Enabled
不执行任何操作。这不是某种“重启”。所以,timer2.Start()
在12:16:57什么也没做。
答案 2 :(得分:3)
您实际上尝试使用计时器实现什么模式?尝试绘制一个显示每个事件及其之间延迟的时序图。输出是预期的:Timer2在第二个Timer1滴答后2秒触发,因为它与Timer1同时启动,只运行了60秒。
答案 3 :(得分:2)
每次发生timer2
事件时,您都会重新启动timer1_Tick
,请使用以下命令:
private bool timer2Started;
private void timer1_Tick(object sender, EventArgs e)
{
Console.WriteLine("Timer1 :" + DateTime.Now.ToString());
if (!timer2Started) { timer2.Start(); timer2Started = true; }
}