我尝试将我的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;
}
}
答案 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
}
然后你的代码将变得简洁。