我已經嘗試過詢問這個問題兩三次之前,但一直沒有能夠正確的階段,所以我想再試一次。我正在製作一個訓練秒錶應用程序。該應用程序的功能是計數10秒,讓受訓者10秒準備。一旦這段時間過去了,20秒鐘的時間內,受訓者需要20秒的艱苦訓練。之後,休息時間有10秒鐘。然後循環回20秒鍛鍊並繼續這個循環8輪。有問題的if語句
我的問題是,它將開始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設置定時器間隔。其他一些東西如切換控件也可能會影響價值。這樣,每當定時器關閉時,就會知道一個階段結束並前進到下一個階段。也許在開始週期/測試/比賽之前添加一個「無」。 – Plutonix
最好使用某種狀態機設計問題,您正試圖實施。去谷歌上查詢。無論如何,你爲什麼重新啓動計時器。我認爲這是導致問題的原因,因爲定時器在第一種情況以外的情況下重置。 –
什麼是定時器實例的類? –