C# windows phone调度程序精度

C# windows phone调度程序精度,c#,windows-phone-7,C#,Windows Phone 7,因此,我得到了一个应用程序(windows phone 7.5 over c#),它使用Dispatcher来模拟计时器。我已将间隔设置为1毫秒: timer.Interval = new TimeSpan(0,0,0,0,1); 然后我宣布一个时间跨度,以便进行简单的倒计时: TimeSpan countdown = TimeSpan.FromSeconds(10); 在每个刻度上,im减去1毫秒: countdown = countdown.Subtract(TimeSpan.FromM

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

timer.Interval = new TimeSpan(0,0,0,0,1);
然后我宣布一个时间跨度,以便进行简单的倒计时:

TimeSpan countdown = TimeSpan.FromSeconds(10);
在每个刻度上,im减去1毫秒:

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

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

这里最好采用另一种方法:

  • 记录启动计时器时的当前时间

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

    TimeSpan countdown = DateTime.Now - startTime;
    

  • 经验告诉我,你只是想让手机硬件处理太多的事件

    从MSDN:

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

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

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


    根据新的间隔增加滴答声和增量之间的时间,或者计算计时器启动的时间,并将其从每个滴答声的当前时间中减去。

    您到底想完成什么?计时器总是很复杂,间隔很短。我需要以毫秒为精度显示倒计时(秒:毫秒)。触发事件似乎需要一毫秒以上的时间。因此,你最好的选择是。很好的解释,我们也不得不认为windows phone在后台运行的应用程序可能没有android手机那么多,但仍然必须运行基本的手机任务。谢谢。好的,我用你的方法得到了更高的精度(这就是解决方案),但是你能解释一下为什么从TimeSpan中减去DateTime的对象比从TimeSpan中减去要好吗?因为我的解决方案不依赖于DispatchTimer的时间段。剩下的解决方案是重新调整
    DispatchTimer
    延迟,因此,如果一项任务被附加到触发勾号上,它或多或少会在一个准确的时间执行。你能帮我一下吗