我有一个应用程序需要多个倒数计时器才能运行(一些同时运行)。他们还使用倒计时剩余时间更新 UI 元素。我已经尝试使用 DispatcherTimer,因为它是与 UI 元素交互的简单方法。然而,超过 300 秒的倒计时,它变得与实时不同步(因为大量的 UI 更新),以至于当它应该为 0 时,我在计时器上还剩 30 秒。
然后我尝试切换到 System.Threading.Timer(下面的代码)。现在,计时器是即时的,并且与现实生活中的时间同步。但是,计时器会在随机数量的滴答声(3 秒到 60 秒之间)后停止滴答声。我怀疑它要么是垃圾收集器启动,要么是 Invoke(用于更新 UI),但真的不知道继续沿着这条路走下去。任何人都可以告诉我为什么计时器会随机停止吗?
private int counter = 500;
private void btnTopBlue_Click(object sender, RoutedEventArgs e)
{
btnTopBlue.Content = counter.ToString();
Timer dt = new Timer(topBlue_Tick, null, 1000, 1000);
}
private void topBlue_Tick(object sender)
{
if (counter > 0)
{
counter--;
Dispatcher.BeginInvoke(() => btnTopBlue.Content = counter.ToString());
}
else
((Timer)sender).Dispose();
}