0

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

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

然后我声明一个 TimeSpan 以便进行简单的倒计时:

TimeSpan countdown = TimeSpan.FromSeconds(10);

在每个刻度上,我减去 1 毫秒:

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

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

4

2 回答 2

6

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

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

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

    TimeSpan countdown = DateTime.Now - startTime;
    
于 2012-06-10T21:54:04.807 回答
3

经验告诉我,您只是想触发太多事件,让手机硬件无法处理。

来自 MSDN:

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

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

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

要么增加滴答之间的时间并根据新的间隔增加,要么将计时器启动的时间从每个滴答的当前时间中减去。

于 2012-06-10T21:58:43.377 回答