Domanda

How can I run clock while form is open?

I am using this code:

DateTime present = DateTime.Now;

label1.Text = present.Hour.ToString()+ present.Minute.ToString() + present.Second.ToString();

I want a running clock when I open the form and should be able to click other objects while the clock is running.

È stato utile?

Soluzione

You need to create System.Threading.Timer object and on it's Tick event update your label text. Also it's more correct to do

    DateTime.Now.ToString("hhMMss");

or

    DateTime.Now.ToShortTimeString();

instead several .ToString() calls.

The result code will be something like that

    new System.Threading.Timer((state) => { BeginInvoke((Action)delegate() { label1.Text = DateTime.Now.ToShortTimeString(); }); }, null, 1000, 1000);

Altri suggerimenti

You can try with the class DispatcherTimer

    DispatcherTimer dpTimer = new DispatcherTimer();

    public MainWindow()
    {
        InitializeComponent();
        dpTimer.Tick += new EventHandler(dpTick);
        dpTimer.Interval = new TimeSpan(0, 0, 1);
        dpTimer.Start();
    }

    private void dpTick(object sender, EventArgs e)
    {
        DateTime present = DateTime.Now;
        timer_label.Content = present.Hour.ToString() + present.Minute.ToString() + present.Second.ToString();
    }

If you want to use the Timer, check this solution:

        new System.Threading.Timer((state) => 
        {
            Action action = () => timer_label.Content = DateTime.Now.ToString("hh:MM:ss");
            Dispatcher.BeginInvoke(action);
        }, null, 1000, 1000);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top