C# Dispatchermer将在每次';过去的

C# Dispatchermer将在每次';过去的,c#,xaml,windows-store-apps,dispatchertimer,C#,Xaml,Windows Store Apps,Dispatchertimer,我遵循了Dispatchermer上Head First C#的一个例子 我第一次按下按钮时,滴答声将增加1秒,但下一次单击按钮时,滴答声将每秒钟/滴答声增加2秒。第三次滴答声增加3秒,以此类推(每按一次按钮增加1秒) 为什么会这样?我如何“重置”股票代码间隔,使其每次只增加1秒 以下是代码: DispatcherTimer timer = new DispatcherTimer(); private void Button_Click_1(object sender, RoutedEv

我遵循了Dispatchermer上Head First C#的一个例子

我第一次按下按钮时,滴答声将增加1秒,但下一次单击按钮时,滴答声将每秒钟/滴答声增加2秒。第三次滴答声增加3秒,以此类推(每按一次按钮增加1秒)

为什么会这样?我如何“重置”股票代码间隔,使其每次只增加1秒

以下是代码:

DispatcherTimer timer = new DispatcherTimer();
    private void Button_Click_1(object sender, RoutedEventArgs e)
    {
        timer.Tick += timer_Tick;
        timer.Interval = TimeSpan.FromMilliseconds(1000);
        timer.Start();
        CheckHappiness();
    }
    int i = 0;
    void timer_Tick(object sender, object e)
    {
        ticker.Text = "Tick #" + i++;
    }

    private async void CheckHappiness()
    {
        ... code ..
        timer.Stop();
    }
   }
  }
干杯

timer.Tick += timer_Tick;
这一行在每次按下按钮时将方法添加到eventhandler;在这个例子中,你做了一个i++来增加i。
当您有两个方法同时执行此操作时(因为计时器在您的时间间隔内滴答作响),则计时器的每滴答都会增加两个。

您会继续为滴答事件添加事件处理程序。因此,第二次单击该按钮时,timer_Tick()方法将运行两次。当然不是你想要的。在构造函数中只订阅一次事件。并使用一个变量作为间隔属性值。您还可以在
CheckHappiness
中调用
timer.Stop()
,这可能会导致计时器根据
引发事件。。。代码..
不起作用