C# 计时器事件处理程序一直被调用?
我似乎有一个线程问题,我想,我已经写了一个计时器返回到主屏幕,如果它在任何其他屏幕上5秒。这段代码在第一次调用C# 计时器事件处理程序一直被调用?,c#,wpf,timer,C#,Wpf,Timer,我似乎有一个线程问题,我想,我已经写了一个计时器返回到主屏幕,如果它在任何其他屏幕上5秒。这段代码在第一次调用ResetScreen()时运行良好,但在它返回到主屏幕本身之后,我无法导航到任何其他屏幕,因为它一直返回到计时器事件处理程序 我也在没有this.Dispatcher.Invoke的情况下测试了它,并将其替换为一个消息框,它几乎每秒都会弹出一个常量 private void ResetScreen() { if (!mainScreen) { myTim
ResetScreen()
时运行良好,但在它返回到主屏幕本身之后,我无法导航到任何其他屏幕,因为它一直返回到计时器事件处理程序
我也在没有this.Dispatcher.Invoke
的情况下测试了它,并将其替换为一个消息框,它几乎每秒都会弹出一个常量
private void ResetScreen()
{
if (!mainScreen)
{
myTimer = new System.Timers.Timer();
myTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
myTimer.Interval = 5000;
myTimer.Start();
}
}
private void OnTimedEvent(object source, ElapsedEventArgs e)
{
myTimer.Stop();
this.Dispatcher.Invoke((Action)(() =>
{
// show main screen
}));
}
编辑:
我认为这只是一个计时器的问题。似乎无法停止计时器。使用
System.Timers.timer()
时,需要将属性显式设置为false
:
myTimer = new System.Timers.Timer();
myTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
myTimer.Interval = 5000;
myTimer.AutoReset = false;
myTimer.Start();
查看上的文档和示例。如何调用ResetScreen以及myTimer所在的位置?+1!虽然这可能是真的,但我有一种感觉,那就是
ResetScreen
被调用的次数太多了,两个都是正确的-我将再次逐步介绍我的代码逻辑。谢谢