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

时间:2014-06-26 12:31:08

标签: c# xaml windows-phone-8 timer

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

 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();
        }

2 个答案:

答案 0 :(得分:0)

使用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)定义何时开始滴答。

答案 1 :(得分:0)

TimeSpan.Seconds仅返回TimeSpan的秒部分 - 从-59到59的值。您可能希望改为使用TotalSeconds。

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

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

将在大约1分钟后停止执行任何操作,因为span.Seconds将为0,即使span表示更长的时间。