我正在使用一个应用程序,我正在使用倒数计时器,我的问题是每分钟计时器停止后,如果我再次关闭或打开应用程序,它会再次打勾并在一分钟后停止。计时器的代码是
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();
}
答案 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表示更长的时间。