我如何更新我的时间?

本文关键字:我的 时间 更新 何更新 | 更新日期: 2023-09-27 18:07:59

当我执行代码时,它得到当前时间,例如11.00,但2分钟后,它仍然显示我执行程序的时间,例如11.00,而我想显示11.02。

尝试使用计时器。勾号事件,但由于某种原因,它没有在一分钟后改变时间。

public string time;
public DispatcherTimer myTimer;
public MainWindow()
{
    InitializeComponent();
    SetUpClock();
    SetUpIdleTimer();
    tbkTime.Text = time;
}
void SetUpClock()
{
    // sets up new timer
    DispatcherTimer Timer = new DispatcherTimer();
    // gets today's time
    time = DateTime.Now.ToString("HH:mm", CultureInfo.CreateSpecificCulture(CultureInfo.CurrentCulture.IetfLanguageTag));
    Timer.Tick += new EventHandler(delegate(object s, EventArgs a)
    {
        time = DateTime.Now.ToString("HH:mm", CultureInfo.CreateSpecificCulture(CultureInfo.CurrentCulture.IetfLanguageTag));
        Timer.Stop();
        Timer.Start();
    });
    Timer.Interval = new TimeSpan(0, 1, 0);
    Timer.Start();
}
void SetUpIdleTimer()
{
    myTimer = new DispatcherTimer();
    myTimer.Tick += new EventHandler(myTimer_Tick);
    myTimer.Interval = new TimeSpan(0, 1, 0);
    myTimer.Start();
}
public void myTimer_Tick(object sender, EventArgs e)
{
    myTimer.Stop();
    myTimer.Start();
}

我如何更新我的时间?

您可以为时钟创建类并在其中使用TaskCancellationToken。例如:

class Clock
{
    Task t;
    CancellationTokenSource source = new CancellationTokenSource();
    Action<DateTime> updateFunction;
    internal Clock(Action<DateTime> updateFunction)
    {
         this.updateFunction = updateFunction;
         t = new Task(() =>
         {
             while (!source.Token.IsCancellationRequested)
             {
                 Thread.Sleep(1000);
                 updateFunction(DateTime.Now);
             }
         }, source.Token);
    }
    internal void Start()
    {
        if(t == null) return;
        t.Start();
    }
    internal void Stop()
    {
        source.Cancel();
    }
}

在你代码的某个地方使用它:

  Clock clock;
  void SetUpClock()
  {
      clock = new Clock(t => tbkTime.Text = t.ToString("HH:mm",
          CultureInfo.CreateSpecificCulture(CultureInfo.CurrentCulture.IetfLanguageTag)));        
      clock.Start();
   }
   void StopClock()
   {
       clock.Stop();
   }