最近摸索着学习C#,刚好老师这儿也有个项目能够实践一下,在里面碰到了一点关于C#定时器的问题。
要求在定时器之中某事件一直触发,关闭定时器的时候定时器关闭。
碰到的问题在于关闭定时器之后再次启动定时器(相当于启动了两次定时器),此时事件也会触发两次。点击n次定时器那么同样一次周期中也会有n次事件被触发。这太那个啥了.......
unsafe private void button1_Click(object sender, EventArgs e)//故障查询
{
ctimer.Elapsed += new System.Timers.ElapsedEventHandler(guzhang);//启动事件
ctimer.Interval = 1000;//时间间隔
ctimer.AutoReset = true;//true为一直执行。false只执行一次
ctimer.Enabled = true;//执行Elapsed事件
}
private void button4_Click(object sender, EventArgs e)//结束查询
{
ctimer.Stop();//定时器停止
}
这是最开始重复执行的代码。
一开始我以为关闭定时器不管用,后来发现没用,后来我以为是频率的问题,重新点击之后周期变成了500ms,每点击一次就频率就变高,还是没用.......最最后来发现是Elapsed事件进行了累加。淦。接下来就好半了在停止定时器的时候我再减去一次需要重复的事件就可以了。所以有了:
unsafe private void button1_Click(object sender, EventArgs e)//故障查询
{
ctimer.Elapsed += new System.Timers.ElapsedEventHandler(guzhang);//启动事件
ctimer.Interval = 1000;//时间间隔
ctimer.AutoReset = true;//true为一直执行。false只执行一次
ctimer.Enabled = true;//执行Elapsed事件
}
private void button4_Click(object sender, EventArgs e)//结束查询
{
ctimer.Stop();//定时器停止
ctimer.Elapsed -= guzhang;//减去一次
}
然后此时我停止定时器之后,再次启动,就是只出现一次事件了。