我如何更新我的时间?
本文关键字:我的 时间 更新 何更新 | 更新日期: 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();
}
您可以为时钟创建类并在其中使用Task
和CancellationToken
。例如:
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();
}