C#旧计时器重叠新的

时间:2014-08-08 15:08:25

标签: c# timer overlap

我有一个带有计时器的小游戏,当一个新的比赛开始时,计时器必须重置,但实际上新的计时器和旧的重叠交替。我不明白为什么。

当一个新游戏启动这个方法时,它被称为:

private void setGame()
{
   game = new Game();

   game.gameData.stopWatch = new StopWatch(timerLabel);
   game.gameData.scoreLabel = scoreLabel;
}

public StopWatch(Label timerLabel)
{
   this.timerLabel = timerLabel;

   _timer = new Timer();
   _timer.Interval = 1000;

   _timer.Tick += new EventHandler(_timer_Tick);
}

然后_timer_Tick使用实际匹配的startData进行一次调用,并使用旧匹配的startData进行另一次调用。为什么呢?

2 个答案:

答案 0 :(得分:1)

当您创建StopWatch的新实例时,旧的计时器仍处于活动状态。

private void setGame()
{
    if (game != null)
        game.gameData.stopWatch.StopTimer();

    game = new Game();

    game.gameData.stopWatch = new StopWatch(timerLabel);
    game.gameData.scoreLabel = scoreLabel;
}

并将StopTimer函数添加到StopWatch类:

public StopTimer()
{
    _timer.Stop();
}

P.S。这是一个快速修复,只是为了使代码工作。从设计的角度来看,不一定正确。使用System.Timers.Timer时,最好实现Dispose模式。见Is it necessary to dispose System.Timers.Timer if you use one in your application?

答案 1 :(得分:0)

确保只拨打

_timer.Tick += new EventHandler(_timer_Tick);

一次。