使用计时器以秒为单位显示时间

时间:2013-11-22 11:31:31

标签: c# timer

我有一个间隔为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;
        }
    }

3 个答案:

答案 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)

// Get seconds
lTimeInMilliSeconds = lTimeInMilliSeconds / 1000;
lSeconds = lTimeInMilliSeconds % 60;
lMinutes = (lTimeInMilliSeconds - lSeconds) / 60;

只要你住在地球上并使用SI,就会有一秒钟内1000毫秒,一分钟内60秒,一小时内60分钟,一天24小时。

如果基本数学不是你最喜欢的,你应该使用DateTimeTimeSpan进行算术。