如何保持倒计时计时器滴答作响

本文关键字:滴答 计时器 何保持 倒计时 | 更新日期: 2023-09-27 18:10:19

我正在一个应用程序上工作,我正在使用一个倒计时计时器,我的问题是,每分钟后计时器停止,如果我关闭或打开应用程序再次滴答并在一分钟后停止。计时器的代码是

 TimeSpan span2 = TimeSpan.FromSeconds(1);
    TimeSpan span;
    private void tbkRemaningTime_Loaded(object sender, RoutedEventArgs e)
    {
        TextBox text = sender as TextBox;
        TimeSpan.TryParse(text.Text, out span);

                if (span.Seconds > 0)
                {
                    span = span.Subtract(span2);
                    text.Text = span.ToString();
                }

    }
    private async void tbkRemaningTime_TextChanged(object sender, TextChangedEventArgs e)
    {
        await System.Threading.Tasks.Task.Delay(1000);
        TextBox text = sender as TextBox;
        TimeSpan.TryParse(text.Text, out span);
        if (span.Seconds > 0)
        {
            span = span.Subtract(span2);
            text.Text = span.ToString();
        }

如何保持倒计时计时器滴答作响

使用System.Threading.Timer:

TimerCallback oneMinuteElapsed = new TimerCallback(TimerHandler);
Timer timer1;
timer1 = new Timer(oneMinuteElapsed, "min1", 0, 1000*60);
private static void TimerHandler(object state)
{
      ...
}

Ticker timer1每分钟开始oneMinuteElapsed,它调用TimerHandler,你可以把你的代码每分钟执行一次。

Timer的最后一个参数是以毫秒为单位的延迟。在此之前的参数(这里为0)定义何时开始滴答。

时间跨度。Seconds只返回TimeSpan的秒部分——一个从-59到59的值。您可能需要使用TotalSeconds。

现在,这段代码(在两个地方)

if (span.Seconds > 0)
{
    span = span.Subtract(span2);
    text.Text = span.ToString();
}

将在大约1分钟后停止做任何事情,因为span。秒将为0,即使span表示更长的时间长度。