2014-10-03 94 views
1

我已經將一個字符串值從一個文本框中分配給一個日期時間變量。它的目的是作爲一個標誌來告訴myTimer對象在達到存儲在workDt中的時間時停止(日期時間變量) 。如何在設定的時間間隔後停止Timer對象?

我試過的當前實現如下,我設置了一個if..else語句來檢查定時器的當前時間是否等於在文本框中輸入的值,但它不會觸發定時器停止。

我在'if'語句上設置了一個斷點,時間值被存儲在workDt中,但沒有觸發計時器停止。

任何人都可以在我的實施中看到一個缺陷,或者提供有關替代解決方案的任何建議嗎?

private void startBtn_Tap(object sender, System.Windows.Input.GestureEventArgs e) 
     { 


      string wrkString; 
      string rstString; 


      //Assign text box time string to string variables. 
      wrkString = wrkTbx.Text; 
      rstString = restTbx.Text; 


      //Assign text box string value to a date time variable. 

      DateTime workDt = DateTime.ParseExact(wrkString.Replace(": ", ":").Replace(" :", ":"), "HH:mm:ss:fff", CultureInfo.InvariantCulture); 
      DateTime restDt = DateTime.ParseExact(rstString.Replace(": ", ":").Replace(" :", ":"), "HH:mm:ss:fff", CultureInfo.InvariantCulture); 


      StopGoCvs.Background = new SolidColorBrush(Colors.Green); 
      hornElmt.Play(); 
      // // set up the timer 
      myTimer = new DispatcherTimer(); 
      myTimer.Interval = new TimeSpan(0, 0, 0, 0, 1); 
      myTimer.Tick += myTimer_Tick; 

      //tell timer to stop when it has reached the allocated work time. 
      if(myTimer.Interval != workDt.TimeOfDay) 
      { 
       // start both timers 
       myTimer.Start(); 
       myStopwatch.Start(); 

      } 
      else 
      { 
       myTimer.Stop(); 
       myStopwatch.Stop(); 

      } 



     } 

回答

1

的時間間隔設置爲:myTimer.Interval = new TimeSpan(0, 0, 0, 0, 1); 意味着你設置一個1ms的時間間隔從而使得它不可能 的條件:

myTimer.Interval == workDt.TimeOfDay 

以往任何時候都得到滿足

你所尋找的是更多的一個StopWatch而不是一個計時器。

+0

看來我應該使用檢查存儲在myStopwatch經過時間的值而不是定時器對象的解釋。你有什麼建議如何檢查?我試過'if(myStopwatch.Elapsed = workDt.TimeOfDay)',但它不是一個有效的賦值。 – 2014-10-07 18:29:55

1

讓計時器對象全球化,所以,在一個類中的所有方法或事件可以訪問,然後開始計時每次都達到給一個事件,然後在該事件有條件檢查的時間範圍爲您的預計時間是否然後停止定時器。

相關問題