我有一个poker blind timer Silverlight应用程序正在浪费时间(运行1小时40分钟后它已经失去了3分钟)。
我在我的Tournament类中使用DispatcherTimer计时器,并且在每个刻度上我都会引发一个UI订阅的事件来更新屏幕(使用DataBound Textblock)。然后我会检查盲人是否结束或者是否还有60秒等等:
private DispatcherTimer timerBlind;
if (timerBlind == null)
{
timerBlind = new DispatcherTimer();
timerBlind.Interval = TimeSpan.FromSeconds(1);
timerBlind.Tick += new EventHandler(Timer_Tick);
}
void Timer_Tick(object sender, EventArgs e)
{
//check if this would be the end of the blind or other key events
OnTimerTick(new EventArgs());
BlindSet.TotalTimeRunning = BlindSet.TotalTimeRunning.Add(TimeSpan.FromSeconds(1));
if (IsTimerBlindRunning)
{
BlindSet.TimeLeftInCurrentBlind = BlindSet.TimeLeftInCurrentBlind.Add(TimeSpan.FromSeconds(-1));
if (BlindSet.TimeLeftInCurrentBlind.TotalSeconds == 0)
{
//advance the level = blinds have gone up
blindset.EndOfBlindGoToNextLevel();
}
}
}
那么,我该如何让它更准确?谢谢你的任何建议......
答案 0 :(得分:3)
不要使用:
BlindSet.TotalTimeRunning = BlindSet.TotalTimeRunning.Add(TimeSpan.FromSeconds(1));
您收到累积错误,因为定时器很少完全针对提示。
相反,存储从盲人开始的时间(_startTime
)并创建一个属性:
TimeSpan TotalRunningTime{
get{
return DateTime.UtcNow-_startTime;
}
}
也可以将此方法应用于TimeLeftInCurrentBlind
。