当我重复使用时,计时器每秒两次,然后三次(我从不改变间隔)

时间:2015-03-05 20:12:50

标签: c# timer windows-phone-8.1

这应该是一个简单的游戏,每次你花费超过你回答的每个问题所允许的时间,你就会失去1点生命。我已经搜索了一个代码来设置我的计时器,找到了多种方法来完成它并最终使用下面的方法。

起初我注意到 timer_Tick()每秒运行两次而不是一次。所以我不得不将经过时间增加 0.5f 而不是 1f 以获得正确的经过时间..它完美无缺,直到我必须重新启动计时器(当我加载一个新问题时)。当我这样做时, timer_Tick()每秒运行三次次而不是两次..这意味着秒计数器减少 1.5f 而不是每秒1f。我想知道导致这种情况的原因以及如何解决这个问题。提前谢谢。

public void Start_timer(float Interval)
{
  ElapsedTime = 0f;
  timer.Tick += timer_Tick;
  timer.Interval = TimeSpan.FromSeconds(Interval);
  bool enabled = timer.IsEnabled;
  timer.Start();
}

void timer_Tick(object sender, object e)
{
    ElapsedTime += 0.5f; //I had to set this to 0.5f to get the correct reading as timer_Tick runs 2 times per second..
    TimeT.Text = "Time: " + Convert.ToString(QTime - ElapsedTime);
    if (ElapsedTime >= QTime && Lives == 0){
        timer.Stop();
        AnswerTB.IsEnabled = false;
        //GameOver
    }
    else if (ElapsedTime >= QTime && Lives != 0)
    {
        ElapsedTime = 0f;
        Lives--;
        LivesT.Text = "Lives: " + Convert.ToString(Lives);
        timer.Stop();
        LoadQuestion(); //This includes a Start_timer(1) call and I never change the 1 second interval.
    }
}

1 个答案:

答案 0 :(得分:1)

每次启动计时器时,您都会重新订阅Tick事件。如果您在计时器停止时未取消订阅,则最终会在每次打勾时多次触发该事件。在创建计时器事件后,只需订阅Tick事件一次,然后将其保留。所以移动线

timer.Tick += timer_Tick;

到创建计时器的代码部分。然后你应该能够在不接收多个事件的情况下停止并启动计时器。