停止手表延迟使用定时器c#

本文关键字:定时器 延迟 手表 | 更新日期: 2023-09-27 18:06:12

我想添加一个秒表到我的形式,但我所做的是落后于其他定时器在pc的时间。你能给出解决办法吗?(我的计时器间隔是100)。这是我的代码:

int min, sec, ms = 0;
    private void timer1_Tick(object sender, EventArgs e)
    {
        Time.Text = min + ":" + sec + ":" + ms.ToString();
        ms++;
        if (ms > 9)
        {
            ms = 0;
            sec++;
        }
        if (sec > 59)
        {
            sec = 0;
            min++;
        }
    }
    private void timer_Click(object sender, EventArgs e)
    {
        timer1.Start();
    }

它工作,但容易延迟。我试图改变很多事情,但没有一个是有效的。

停止手表延迟使用定时器c#

计时器的滴答声并不像你想象的那么精确。因此,如果您计算开始时间和tick调用时间之间的差值会更好。

DateTime startTime = DateTime.Now;  
private void timer1_Tick(object sender, EventArgs e)
{
    Time.Text = DateTime.Now.Subtract(startTime).ToString(@"mm':ss'.ff");
}
private void timer_Click(object sender, EventArgs e)
{
    startTime = DateTime.Now;   
    timer1.Start();
}

你的计时器间隔是100ms,所以创建一个TimeSpan对象,作为一个类变量,

TimeSpan _100ms = new TimeSpan(0,0,0,0,100);

将这个添加到你用来跟踪时间的TimeSpan对象中

TimeSpan ts = new TimeSpan();
ts = ts.Add(_100ms);

显示在UI中:

private void timer1_Tick(object sender, EventArgs e)
{
    ts = ts.Add(_100ms);
    Time.Text = ts.ToString(@"hh':mm':ss'.fff");
}

小提琴演示