Visual C# windows 形式的数字时钟未自动更新
Digital Clock in visual C# windows form not updating automatically
我是 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.Timer' 而不是 'System.Windows.Forms.Timer',因为如果 UI 冻结,WinForms 计时器将冻结(因为它运行在主 UI 线)。另一方面,System.Timers.Timer 在工作线程上运行,并且只将 UI 请求发布到主上下文
我是 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.Timer' 而不是 'System.Windows.Forms.Timer',因为如果 UI 冻结,WinForms 计时器将冻结(因为它运行在主 UI 线)。另一方面,System.Timers.Timer 在工作线程上运行,并且只将 UI 请求发布到主上下文