【发布时间】:2021-12-10 19:42:30
【问题描述】:
我开发了一个程序,使用Threading.Timer 在 30 秒后调用一个方法。
该方法正在被调用,它正在工作,但我想获取该事件,以便知道 30 秒还剩多少秒。
我需要一种每秒钟触发一次的滴答事件。这样我也可以显示剩余的秒数。这是我的代码:
Timer timerObj;
timerObj = new Timer(UpdateUI, null, Timeout.Infinite, Timeout.Infinite);
timerObj.Change(30000, Timeout.Infinite);
public void UpdateUI(object state)
{
ShowQR= false;
}
我怎么才能倒计时呢?
【问题讨论】:
-
也许添加一个
Stopwatch来跟踪经过的时间和另一个Timer每秒触发一次左右?然后该计时器的处理程序可以使用Stopwatch来确定经过的时间,从而确定剩余时间。 -
@MatthewWatson - 你的想法似乎很棒。能不能写出来方便我补充。
-
您也可以使用您现在拥有的相同计时器(但有 1 秒滴答),并且不是在每次滴答时更新 UI,而是在经过的时间超过 30 秒时更新 UI。
-
其实我更喜欢 Evk 的建议——它避免了有两个计时器。
-
用时钟测量经过的时间,DateTime.UtcNow 很好。您只需要一个计时器来刷新 UI。它的间隔并不重要,100 毫秒是一个不错的选择。优于 1 秒,这往往会考验奈奎斯特的采样定理。并使用正确的 种类 计时器来更新 UI,例如 System.Windows.Forms.Timer 或 DispatcherTimer,这样您就不必担心线程安全问题。