我有一个带有计时器的小游戏,当一个新的比赛开始时,计时器必须重置,但实际上新的计时器和旧的重叠交替。我不明白为什么。
当一个新游戏启动这个方法时,它被称为:
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
进行另一次调用。为什么呢?
答案 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);
一次。