为什么我的计时器重复?

时间:2017-10-23 17:37:54

标签: c# .net timer

我正在创建一个Timer,它会在每次完成时触发一个事件(1900 ms),然后继续这样做。但是当我停止它然后再次启动时,事件会触发两次,如果我再次停止并重新启动它,它将触发事件三次,依此类推。 我怎么能避免这种情况?感谢。

        public static System.Timers.Timer aTimer = new System.Timers.Timer();

        public static void ChequearRecepcion()
        {
            aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
            aTimer.Interval = 1900;
            aTimer.Start();     
        }

        public static void OnTimedEvent(object source, ElapsedEventArgs e)
        {
            EnviarConsulta();
        }

2 个答案:

答案 0 :(得分:0)

由于您多次分配此事件,您的活动会因发生一次事件而被多次触发。

let integerValue = Int(stringValue)

请注意语法是aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);,而不是+=。这意味着每次运行此代码时,都会向事件添加新的处理程序,而不仅仅是重新分配。添加的每个处理程序将在触发事件时运行。因此,如果您启动并停止了三次,则会添加三个事件处理程序,每个事件处理程序都会运行代码。

您需要为事件分配一次事件处理程序,可能在构造函数中而不是在=中。您可能正在寻找的另一个选项是在停止计时器时删除事件处理程序。

ChequearRecepcion

答案 1 :(得分:0)

每次调用方法ChequearRecepcion时,您都会附加事件。

在您停止计时器的方法中,您没有包含该计时器,您可以取消订阅该事件,或者您只能创建一次计时器实例(在您的类的构造函数中,最有可能)并且只在那时订阅该事件。