如何防止c#中的计时器时差?

时间:2018-02-27 13:48:17

标签: c# .net timer stopwatch

我在Windows窗体应用程序中使用了2个计时器(timer1timer2)和1个秒表(watch)。 timer1完成后,watch工作已停止,timer2开始工作。我的问题是:watchtimer1的停止时间不等于watchtimer2的初始值。定时器的间隔值相等,它是25毫秒如何防止定时器中watch启动和停止值之间的时间差?这是我的代码;

    Stopwatch watch=new Stopwatch();

    private void timer1_Tick(object sender, EventArgs e)
    {
       watch.Start();
      var time = watch.Elapsed.TotalSeconds;

     .
     .
     .
      watch.stop();
     }
    private void timer2_Tick(object sender, EventArgs e)
     {
      watch.Start();
      var time = watch.Elapsed.TotalSeconds;

     .
     .
     .
      watch.stop();
     }

1 个答案:

答案 0 :(得分:0)

首先,你实际上无法获得相同的启动和停止时间 - 它们之间存在处理时间。 接下来,根据Windows.Forms.Timer的文档:

  

Windows窗体计时器组件是单线程的,精度限制为55毫秒。如果需要更高精度的多线程计时器,请使用System.Timers命名空间中的Timer类。

link

因此,您的计时器值低于准确度。

我认为,解决这个问题的唯一方法是将所有代码放在一个计时器中,这样timer2动作就会在timer1动作之后立即完成。

编辑:既然你没有说出什么是计时器,我认为那是WinForms计时器。对不起,如果我错了。