C# 如何在ElapsedEventHandler事件后停止事件?
我正在wpf项目中使用计时器。间隔为5s。 如果在5秒内,我想在 已执行timer_Appeased,但未执行timer_Appeased方法。 我该怎么办C# 如何在ElapsedEventHandler事件后停止事件?,c#,wpf,timer,C#,Wpf,Timer,我正在wpf项目中使用计时器。间隔为5s。 如果在5秒内,我想在 已执行timer_Appeased,但未执行timer_Appeased方法。 我该怎么办 public main() { Timer timer=new Timer(5000); timer.Elapsed += new ElapsedEventHandler(timer_Elapsed); timer.start(); } private void timer_Elapsed(object
public main()
{
Timer timer=new Timer(5000);
timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);
timer.start();
}
private void timer_Elapsed(object sender, ElapsedEventArgs e)
{
timer.Stop();
Dispatcher.Invoke(DispatcherPriority.Normal, (Action)delegate()
{
});
}
只需设置此
timer.stop()
或timer.IsEnabled=false代码>。两者都不会提升其已用函数。您使用的是系统.Timers.Timer
。如果要在事件发生之前的时间间隔内重新启动,请调用
timer.Stop();
timer.Start();
或
显然,要执行此操作,调用代码必须能够访问timer
变量,因此您可能需要在类级别声明它。我已更改了问题。将timer.AutoReset属性设置为true会导致许多问题,请不要这样做。当您需要调用Dispatcher.Invoke()时,使用此计时器毫无意义,它并不比DispatcherTimer()好。更糟糕的是。timer.stop可以停止计时器,但会执行timer\u。我不想让它执行。当计时器停止时,经过的事件不会发生。这就是让它停止的意义。如果希望计时器只出现一次,请不要在它之后调用Start(),也不要设置计时器的AutoReset属性。在你的问题中,你说的是“重新打开此计时器”-你不是指重新启动它吗?这是第一次:timer.appeased+=new ElapsedEventHandler(timer_appeased);timer.start();计时器将被执行,但我不想执行。很抱歉,我的英语太差了。我为您创建了几个示例(“因为我仍然无法100%理解问题”),可能以下选项之一有帮助:然后尝试timer.stop
或设置其timer.IsEnabled=false
timer.stop可以停止计时器,但timer_Expased将被执行一次。第一次:timer.Expased+=新的ElapsedEventHandler(timer_Expased);timer.start();计时器将被执行,但我不想执行。@zhchma:i didtimer timer=new timer(5000);timer.appeased+=新的ElapsedEventHandler(timer\u appeased);timer.Start();timer.Stop()代码>。它甚至没有出现一次。计时器=新计时器(5000);timer.appeased+=新的ElapsedEventHandler(timer\u appeased);timer.Start();2秒后,如何停止计时器的运行。
timer.Enabled = false;
timer.Enabled = true;