Timer事件处理程序一直被调用?

时间:2012-03-20 20:03:56

标签: c# wpf timer

我认为我似乎有一个线程问题,我已经写了一个计时器,如果它在任何其他屏幕上持续5秒,则返回到主屏幕。这个代码在第一次调用ResetScreen()时工作正常,但在它返回主屏幕后,我无法导航到任何其他屏幕,因为它一直返回到Timer事件处理程序。

我还在没有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
    }));    
}

编辑: 我认为它只是一个计时器问题。似乎无法阻止计时器。

1 个答案:

答案 0 :(得分:3)

使用System.Timers.Timer()时,您需要将AutoReset属性明确设置为false

myTimer = new System.Timers.Timer();
myTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
myTimer.Interval = 5000;
myTimer.AutoReset = false;
myTimer.Start();

查看MSDN上的文档和示例。