gpt4 book ai didi

C#倒数计时器

转载 作者:可可西里 更新时间:2023-11-01 08:31:47 24 4
gpt4 key购买 nike

我正在尝试使用 C# 进行倒计时并以以下格式显示时间:

hour:minutes:seconds

我已经试过了:

 var minutes = 3; //countdown time
var start = DateTime.Now;
var end = DateTime.Now.AddMinutes(minutes);
Thread.Sleep(1800);
if (??) // I tried DateTime.Now > end not works
{
//... show time
label1.Text = "...";
}
else
{
//done
label1.Text = "Done!";
}

解决这个问题的不同方法也出现了。提前致谢

最佳答案

你不应该在这里使用 Thread.Sleep。 UI 线程上的 Thread.Sleep 会阻塞 UI,而在另一个线程上使用它会由于线程同步而导致额外的复杂性。

如果您有 C# 5 或异步 CTP,您可能可以编写与您所做的非常相似的代码,因为您随后会得到一个基于延续的等价于 Thread.Sleep 的东西,它不会阻塞 UI .

在标准 C# 4 中,我会使用 System.Windows.Forms.Timer .

开始倒计时:

var minutes = 3; //countdown time
var start = DateTime.UtcNow; // Use UtcNow instead of Now
endTime = start.AddMinutes(minutes); //endTime is a member, not a local variable
timer1.Enabled = true;

在您编写的计时器处理程序中:

TimeSpan remainingTime=endTime-DateTime.UtcNow;
if(remainingTime<TimeSpan.Zero)
{
label1.Text = "Done!";
timer1.Enabled=false;
}
else
{
label1.Text = remainingTime.ToString();
}

有关其他格式选项,请参阅 Standard TimeSpan Format Strings .

此代码仍然存在的一个问题是,如果系统时钟发生变化,它将无法正常工作。

当使用 DateTime.Now 而不是 DateTime.UtcNow 时,它也会在切换夏令时或更改时区时中断。由于您想要确定某个时间点(而不是显示时间),因此您应该使用 UTC 而不是本地时间。

关于C#倒数计时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7970580/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com