Silverlight 4中的DispatcherTimer失去了时间 - 更准确的是什么?

时间:2010-08-10 00:48:32

标签: silverlight silverlight-4.0

我有一个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();
            }
        }
    }

那么,我该如何让它更准确?谢谢你的任何建议......

1 个答案:

答案 0 :(得分:3)

不要使用:

BlindSet.TotalTimeRunning = BlindSet.TotalTimeRunning.Add(TimeSpan.FromSeconds(1));

您收到累积错误,因为定时器很少完全针对提示。

相反,存储从盲人开始的时间(_startTime)并创建一个属性:

TimeSpan TotalRunningTime{
    get{
        return DateTime.UtcNow-_startTime;
    }
}

也可以将此方法应用于TimeLeftInCurrentBlind