c#定时器重新启DI动+1后事件启动+1

最近摸索着学习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;//减去一次
}

然后此时我停止定时器之后,再次启动,就是只出现一次事件了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值