我正在创建一个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();
}
答案 0 :(得分:0)
由于您多次分配此事件,您的活动会因发生一次事件而被多次触发。
let integerValue = Int(stringValue)
请注意语法是aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
,而不是+=
。这意味着每次运行此代码时,都会向事件添加新的处理程序,而不仅仅是重新分配。添加的每个处理程序将在触发事件时运行。因此,如果您启动并停止了三次,则会添加三个事件处理程序,每个事件处理程序都会运行代码。
您需要为事件分配一次事件处理程序,可能在构造函数中而不是在=
中。您可能正在寻找的另一个选项是在停止计时器时删除事件处理程序。
ChequearRecepcion
答案 1 :(得分:0)
每次调用方法ChequearRecepcion
时,您都会附加事件。
在您停止计时器的方法中,您没有包含该计时器,您可以取消订阅该事件,或者您只能创建一次计时器实例(在您的类的构造函数中,最有可能)并且只在那时订阅该事件。