windows phone DispatcherTimer精度

时间:2012-06-10 21:49:57

标签: c# windows-phone-7

所以,我使用DispatcherTimer来模拟计时器,得到了一个应用程序(Windows Phone 7.5 over c#)。我已将间隔设置为1毫秒:

timer.Interval = new TimeSpan(0,0,0,0,1);

然后我宣布TimeSpan以进行简单的倒计时:

TimeSpan countdown = TimeSpan.FromSeconds(10);

在每个刻度上im substracting 1毫秒:

countdown = countdown.Subtract(TimeSpan.FromMilliseconds(1));

在Visual Studio的Windows手机模拟器256/512中它处理“没问题”,但是当我在手机上运行它(LG Quantum)时,它似乎有精确问题。我将它与运行应用程序的PC屏幕进行了比较,并且在手机上的速度较慢。我试图不在我的手机中以调试模式运行应用程序。这有什么解决方案吗?或者我必须采取另一种方法?

2 个答案:

答案 0 :(得分:6)

这里采用不同的方法会更好:

  1. 记录启动计时器的当前时间

    DateTime startTime = DateTime.Now;
    
  2. 每次计时器滴答时,重新计算倒计时

    TimeSpan countdown = DateTime.Now - startTime;
    

答案 1 :(得分:3)

经验告诉我,你只是试图为电话硬件解决太多事件。

来自MSDN:

  

DispatcherTimer在每个DispatcherTimer循环的顶部重新评估。

     

定时器不能保证在时间间隔发生时准确执行,但保证在时间间隔发生之前不执行。

请记住,实际的手机硬件是单核心,因此尝试每秒精确捕获1000个事件并不是最佳方法。

根据新的间隔增加刻度和增量之间的时间,或者计时器启动时间,并从每个刻度的当前时间减去它。