Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 计时器事件处理程序一直被调用?_C#_Wpf_Timer - Fatal编程技术网

C# 计时器事件处理程序一直被调用?

C# 计时器事件处理程序一直被调用?,c#,wpf,timer,C#,Wpf,Timer,我似乎有一个线程问题,我想,我已经写了一个计时器返回到主屏幕,如果它在任何其他屏幕上5秒。这段代码在第一次调用ResetScreen()时运行良好,但在它返回到主屏幕本身之后,我无法导航到任何其他屏幕,因为它一直返回到计时器事件处理程序 我也在没有this.Dispatcher.Invoke的情况下测试了它,并将其替换为一个消息框,它几乎每秒都会弹出一个常量 private void ResetScreen() { if (!mainScreen) { myTim

我似乎有一个线程问题,我想,我已经写了一个计时器返回到主屏幕,如果它在任何其他屏幕上5秒。这段代码在第一次调用
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
被调用的次数太多了,两个都是正确的-我将再次逐步介绍我的代码逻辑。谢谢