簡體   English   中英

C#中的倒數計時器跳過時間

[英]Countdown Timer Skipping Time in C#

我在C#中有這個

private void counter_Tick(object sender, EventArgs e)
    {
        Time.Text = String.Format("{0:000}", Hour) + ":" + String.Format("{0:00}", Minute) + ":" + String.Format("{0:00}", Second);
        if (Second != 00)
        {
            Second = Second - 1;
        }
        else if (Minute != 00)
        {
            Minute = Minute - 1;
            Second = 59;
        }
        else if (Hour != 00)
        {
            Hour = Hour - 1;
            Minute = 59;
        }
        else
        {
            counter.Stop();
            Time.ForeColor = Color.Red;
        }
    }

哪個可行,但是當減去一小時加到分鍾數時,它從00分鍾變為58分鍾而不是59分鍾

例如。

From: 001:00:00
To:   000:58:59

還有一種更好的方法可以使倒數計時器在達到000:00:00時執行某項操作???

好,讓我們看看時間為10:00:00時會發生什么。

  1. 減去一小時: 09:00:00 : 09:00:00 : 09:00:00
  2. 將分鍾設置為59: 09:59:00 :59: 09:59:00

如果您發現時間過了一分鍾(10: 10:00:00 - 09:59:00 = 00:01:00 )。 解決方法是將秒數也設置為59。 所以現在我們的代碼是。

// ...
else if (Hour != 00)
{
    Hour = Hour - 1;
    Minute = 59;
    Second = 59;
}
// ...

您可以使用標准的.Net類來減去時間:

private TimeSpan timeSpan;
private TimeSpan oneSecond = new TimeSpan(0, 0, 1);

private void timer_Elapsed(object sender, ElapsedEventArgs e)
{
    Time.Text = timeSpan.ToString();

    if (timeSpan == TimeSpan.Zero)
    {
        Time.ForeColor = Color.Red;
        timer.Stop();
        return;
    }

    timeSpan -= oneSecond;
}

啟動計時器時初始化時間跨度(我使用了System.Timers.Timer):

timeSpan = new TimeSpan(1, 0, 0);
Timer timer = new Timer(1000);
timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);
timer.Start();

您還需要將Second設置為59 否則,一旦計時器再次計時, else if (Minute != 00)並立即將Minute (已經是59 )減1,它將立即切換到else if (Minute != 00)

DateTime start;
DateTime final;

private void start()
{
    start = DateTime.Now;
    final = start + TimeSpan.FromHours(1);
}

private void counter_Tick(object sender, EventArgs e)
{
    start = DateTime.Now;
    Time.Text = (final-start).Hours.ToString() + ":" + (final-start).Minutes.ToString() + ":" + (final-start).Seconds.ToString();    
    if (final == start)
    {
        //final code
    }        
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM