C#中的延迟计时器

时间:2016-02-22 04:29:04

标签: c# timer delay

我尝试将我的RFID连接到秒表,如果那是标记,计时器开始,如果不是,计时器停止,但我的计时器有延迟,你能帮我解决吗?

在第一个标签中,定时器正常运行,之后定时器延迟1秒

这是我的代码程序:

int min1, min0, sec1, sec0 = 0;

private void timer1_Tick(object sender, EventArgs e)

    {

        timer1.Interval = 1000;
        label6.Text = min1 + min0.ToString() + ":" + sec1 + sec0.ToString();
        if (sec0 < 9)
        {
            sec0++;
        }
        else
        {
            sec0 = 0;
            sec1++;
        }
        if (sec1 == 6)
        {
            min0++;
            sec1 = 0;
        }

        if (min0 == 10)
        {
            min1++;
            min0 = 0;
        }
        if (min1 == 6)
        {
            min1 = 0;
            min0 = 0;
            sec1 = 0;
            sec0 = 0;
        }           
    }

1 个答案:

答案 0 :(得分:1)

您的代码似乎存在一些问题:

首先,您只需初始化timer.Interval一次。但你要做的是重复初始化你的计时器间隔。

timer1.Interval = 1000; //declare only once somewhere else, not in the timer tick

其次,如果您想根据您的RFID连接启动和停止计时器运行,那么您应该在您的RFID卡后面调用timer1.Start()timer1.Stop()方法&#34; #34;事件(你必须在某处指定,但这是不同的主题。为了给出示例,我将事件命名为ConnectionChanged

private void rfid_ConnectionChanged(object sender RFIDEventArgs e){ //this is a hypothetical event handler
    if(e.IsConnected){
        timer1.Start();
    } else {
        timer1.Stop();
    }
}

第三,使用DateTime结构。 不要使用int min1, min0, sec1, sec0 = 0;DateTime struct会为您完成计算工作。您需要做的只是在每次连接RFID时重新初始化DateTime

DateTime rfidConnectedTime; 
private void rfid_ConnectionChanged(object sender RFIDEventArgs e){ //this is a hypothetical event handler
    if(e.IsConnected){
        rfidConnectedTime = DateTime.Now;
        timer1.Start();
    } else {
        timer1.Stop();
    }
}

然后在timer1.Tick事件中使用它:

private void timer1_Tick(object sender, EventArgs e)
{
    TimeSpan ts = DateTime.Now - rfidConnectedTime;
    label6.Text = ts.Hours.ToString("d2") + ":" + ts.Minutes.ToString("d2") + ":" + ts.Seconds.ToString("d2");
    //Note: .ToString("d2") is to print each element in two digits like 00 or 01 instead of 0 or 1
}

然后你的代码将变得简洁。