计时器在60秒后重置

本文关键字:60秒 计时器 | 更新日期: 2023-09-27 17:52:55

下面是我试图将其用作我们正在构建的桌面任务计时器上的耗尽计时器的代码。现在,当它运行时,它只计算60秒,然后重置,永远不会加到分钟。

//tick timer that checks to see how long the agent has been sitting in the misc timer status, reminds them after 5 mintues to ensure correct status is used
private void statusTime_Tick(object sender, EventArgs e)
{
    counter++;
    //The timespan will handle the push from the elapsed time in seconds to the label so we can update the user
    //This shouldn't require a background worker since it's a fairly small app and nothing is resource heavy
    var timespan = TimeSpan.FromSeconds(actualTimer.Elapsed.Seconds);
    //convert the time in seconds to the format requested by the user
    displaycounter.Text=("Elapsed Time in " + statusName+" "+ timespan.ToString(@"mm':ss"));
    //pull the thread into updating the UI
    Application.DoEvents();
}

计时器在60秒后重置

快速修复

我认为问题是你使用的Seconds是0-59。您希望在现有代码中使用TotalSeconds:

var timespan = TimeSpan.FromSeconds(actualTimer.Elapsed.TotalSeconds);

评论>

然而,这并没有多大意义,因为你可以直接使用TimeSpan对象:

var timespan = actualTimer.Elapsed;

同样,我不能看到你所有的应用程序,但我希望你不需要调用Application.DoEvents();。因为UI应该在有机会时自动更新……如果没有,那么你需要考虑将阻塞UI的代码移到另一个线程中。


推荐

尽管如此,我还是建议您不要使用计时器来跟踪运行时间。计时器会随着时间的推移而失去准确性。最好的方法是在启动进程时存储当前系统时间,然后在需要显示'timer'时在此时按需计算。

一个非常简单的例子来帮助解释我的意思:

DateTime start;
void StartTimer()
{
    start = DateTime.Now;
}
void UpdateDisplay()
{
    var timespan = DateTime.Now.Subtract(start);
    displaycounter.Text = "Elapsed Time in " + statusName + " " + timespan.ToString(@"mm':ss"));
}

然后你可以使用一个计时器来定期调用你的UpdateDisplay方法:

void statusTime_Tick(object sender, EventArgs e)
{
    UpdateDisplay();
}