我有一个间隔为1的计时器。每当它打勾时,我想添加时间并将其显示在我的表格上。
但它有问题。时间更新自己放慢速度。如果我将间隔设置为1000,它可以工作,但我需要它运行得更快。
这是我的代码:
private void button1_Click_1(object sender, EventArgs e)
{
timer.Interval = 1;
timer.Start();
}
private void timer_Tick(object sender, EventArgs e)
{
lCount++;
label1.Text = GetTimeForGUI(lCount);
}
private String GetTimeForGUI(long lTimeInMilliSeconds)
{
String sGUITime = string.Empty;
try
{
// Get Format: 00:00
if (((lTimeInMilliSeconds / 1000) % 60) == 0)
{
sGUITime = Convert.ToString((lTimeInMilliSeconds / 1000) / 60);
// Get the number of digits
switch (sGUITime.Length)
{
case 0:
sGUITime = "00:00";
break;
case 1:
sGUITime = "0" + sGUITime + ":" + "00";
break;
case 2:
sGUITime = sGUITime + ":" + "00";
break;
}
}
else
{
long lMinutes;
long lSeconds;
// Get seconds
lTimeInMilliSeconds = lTimeInMilliSeconds / 1000;
lSeconds = lTimeInMilliSeconds % 60;
lMinutes = (lTimeInMilliSeconds - lSeconds) / 60;
switch (Convert.ToString(lMinutes).Length)
{
case 0:
sGUITime = "00";
break;
case 1:
sGUITime = "0" + Convert.ToString(lMinutes);
break;
case 2:
sGUITime = Convert.ToString(lMinutes);
break;
}
sGUITime = sGUITime + ":";
switch (Convert.ToString(iSeconds).Length)
{
case 0:
sGUITime = sGUITime + "00";
break;
case 1:
sGUITime = sGUITime + "0" + Convert.ToString(lSeconds);
break;
case 2:
sGUITime = sGUITime + Convert.ToString(lSeconds);
break;
}
}
return sGUITime;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
return string.Empty;
}
}
答案 0 :(得分:2)
我认为你自己想做太多事情。使用框架来帮助您。
当你有一个Timer和DateTime可用时,不要根据计数器计算你自己的秒数。
下面的实现将为您提供标签中的秒数(每100毫秒更新一次)
DateTime startTime;
private void button1_Click(object sender, EventArgs e)
{
timer.Tick += (s, ev) => { label1.Text = String.Format("{0:00}", (DateTime.Now - startTime).Seconds); };
startTime = DateTime.Now;
timer.Interval = 100; // every 1/10 of a second
timer.Start();
}
希望这有帮助,
答案 1 :(得分:0)
1表示1毫秒。当你完成GUI更新时,它会再次被解雇。这就是你面临延迟的原因。我无法弄清楚为什么你想要每1毫秒更新一次。您需要清楚地发布您的要求才能获得更好的答案。
答案 2 :(得分:0)