visual c# windows形式的数字时钟不会自动更新
本文关键字:更新 时钟 数字 windows visual | 更新日期: 2023-09-27 18:09:41
我是visual c# windows窗体的新手。我正在制作数字时钟,这样当我按下一个按钮时,时间就会开始并不断更新,即意味着秒应该继续下去,当我按下停止按钮时,它应该停止。但在我目前的代码,时间得到显示,但它的秒没有更新。有人能帮我吗?谢谢。
代码namespace DTDemo
{
public partial class Form1 : Form
{
private DateTime datetime;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e) // start button
{
datetime = DateTime.Now;
String time = datetime.Hour + ":" + datetime.Minute + ":" + datetime.Second;
label1.Text = time;
}
private void button2_Click(object sender, EventArgs e) //stop button
{
label1.Text = " ";
}
}
}
我试过把它放在while(true)中,但是它冻结了,什么也没有发生。请帮忙,谢谢!
当然不是,您需要一个计时器来不断更新标签。试试以下命令:
namespace DTDemo
{
public partial class Form1 : Form
{
private DateTime datetime;
System.Timers.Timer timer = new System.Timers.Timer(1000);
public Form1()
{
InitializeComponent();
timer.Elapsed += timer_Elapsed;
}
void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
MethodInvoker method = new MethodInvoker(delegate{
datetime = DateTime.Now;
String time = datetime.Hour + ":" + datetime.Minute + ":" + datetime.Second;
label1.Text = time;
});
if (label1.InvokeRequired)
label1.Invoke(method);
else
method();
}
private void button1_Click(object sender, EventArgs e) // start button
{
timer.Start();
}
private void button2_Click(object sender, EventArgs e) //stop button
{
timer.Stop();
label1.Text = " ";
}
}
}
顺便说一句,我正在使用"System.Timers"。而不是"System.Windows.Forms. Timer"。定时器',因为WinForms定时器将冻结,如果UI冻结(因为它运行在主UI线程)。System.Timers。另一方面,Timer在工作线程上运行,只将UI请求发送到主上下文