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)中,但是它冻结了,什么也没有发生。请帮忙,谢谢!

visual c# windows形式的数字时钟不会自动更新

当然不是,您需要一个计时器来不断更新标签。试试以下命令:

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请求发送到主上下文