【发布时间】:2015-01-05 08:00:17
【问题描述】:
我曾尝试过两到三遍这个问题,但未能正确地解决这个问题,所以我想再试一次。我正在制作一个训练秒表应用程序。该应用程序的功能是计算10秒,让学员有10秒的准备时间。一旦该时间过去,它计为 20 秒,受训者在 20 秒内进行了艰苦的锻炼。之后,有 10 秒的休息时间。然后它循环回到 20 秒的锻炼并继续这个循环 8 轮。
我的问题是它会开始 10 秒准备,但随后会循环回到 10 秒计时器。出于某种原因,我的 if else 语句不断循环回到准备时间。 我在 if 语句中使用秒表和时间跨度。
private void timer_Tick(object sender, EventArgs e)
{
//throw new NotImplementedException();
//timer timespan is more than zero, start stopwatch(get the prepare counter going)
if (timerWatch.Elapsed < new TimeSpan(0, 0, 11))// if its 5sec
{
milllisecond = timerWatch.ElapsedMilliseconds;
second = milllisecond / 1000;
milllisecond = milllisecond % 1000;
minute = second / 60;
second = second % 60;
hour = minute / 60;
minute = minute % 60;
txtblTime.Text = minute.ToString("00") + ":" + second.ToString("00");
}
else if (timerWatch.Elapsed >= new TimeSpan(0, 0, 10) && timerWatch.Elapsed < new TimeSpan(0, 0, 21))//more than 4sec
{
timerWatch.Restart();
milllisecond = timerWatch.ElapsedMilliseconds;
second = milllisecond / 1000;
milllisecond = milllisecond % 1000;
minute = second / 60;
second = second % 60;
hour = minute / 60;
minute = minute % 60;
txtblTime.Text = minute.ToString("00") + ":" + second.ToString("00");
txtblPrepare.Visibility = System.Windows.Visibility.Collapsed;
txtblGo.Visibility = System.Windows.Visibility.Visible;
}
else if (timerWatch.Elapsed < new TimeSpan(0, 0, 21))
{
timerWatch.Restart();
milllisecond = timerWatch.ElapsedMilliseconds;
second = milllisecond / 1000;
milllisecond = milllisecond % 1000;
minute = second / 60;
second = second % 60;
hour = minute / 60;
minute = minute % 60;
txtblTime.Text = minute.ToString("00") + ":" + second.ToString("00");
txtblGo.Visibility = System.Windows.Visibility.Collapsed;
}
else
txtblTime.Text = "Times Up!";
}
【问题讨论】:
-
为什么不使用 Enum 来跟踪状态或模式
{Prep, WorkOut, Rest}并根据该类型的 var 设置计时器间隔。诸如切换控件之类的其他事情也可以作用于该值。这样,每当计时器关闭时,您就知道一个阶段已经结束并进入下一个阶段。也许添加一个None,直到他们开始循环/测试/竞赛。 -
最好使用某种状态机设计问题,你正在尝试执行。去谷歌上查询。无论如何,您为什么要重新启动计时器。我认为这是导致问题的原因,因为计时器在第一种情况以外的情况下会重置。
-
定时器实例的类是什么?
-
你第三个 else-if 毫无意义。
标签: c# if-statement windows-phone-8