[英]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
時會發生什么。
09:00:00
: 09:00:00
: 09:00:00
。 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.