2011-02-04 38 views
4

我已經編寫了一個應用程序,並使用了6個定時器,它們必須先後啓動,但這些定時器無法正常工作。我對定時器知之甚少。c中定時器的問題#

例如,timer1在應用程序中啓動併發生某些事情。那麼timer1必須永遠停止,並且timer2必須立即啓動,並在應用程序中發生。然後timer2必須永遠停止,timer3必須啓動等等。

請幫忙。

這裏是我的代碼:

int yyyy = 0; 

    void move() 
    { 
     yyyy++; 
     if (yyyy <= 1) 
     { 

      timer1.Start(); 
      timer1.Interval = 15; 
      timer1.Tick += new EventHandler(timer_Tick1); 
     } 


     if (yyyy <= 2) 
     { 

      timer2.Start(); 
      timer2.Interval = 15; 
      timer2.Tick += new EventHandler(timer_Tick2); 
     } 

     if (yyyy <= 3) 
     { 

      timer3.Start(); 
      timer3.Interval = 15; 
      timer3.Tick += new EventHandler(timer_Tick3); 
     } 

     if (yyyy <= 4) 
     { 

      timer4.Start(); 
      timer4.Interval = 15; 
      timer4.Tick += new EventHandler(timer_Tick4); 
     } 

     if (yyyy <= 5) 
     { 

      timer5.Start(); 
      timer5.Interval = 15; 
      timer5.Tick += new EventHandler(timer_Tick5); 
     } 


     if (yyyy <= 6) 
     { 

      timer6.Start(); 
      timer6.Interval = 15; 
      timer6.Tick += new EventHandler(timer_Tick6); 
     } 

    } 

和:(定時器2爲例)。

(所有定時器的下面代碼都完全相同)。

int t = 0; 

    private void timer_Tick2(object sender, EventArgs e) 
    { 
     t++; 

     if (t <= 150) 
     { 
      // do somthing 
     } 
     else 
      timer2.Stop(); 

    } 
+0

你有什麼問題..你是否希望其他計時器在之前的計時器滴答150次之前不啓動..那麼你根本不需要計時器..它看起來像普通的順序過程 – 2011-02-04 09:35:05

回答

2

這聽起來像你不需要六個定時器 - 你需要一個計時器,它確實六位一體的動作火災時,根據當前的狀態。我認爲這會導致比啓動多個定時器更簡單的代碼。

1

這裏首先要考慮的是,如果所有6個定時器都有相同的代碼,我確定你最好只使用一個定時器,而保持一個狀態,讓你知道你是否在模式1,2,3,4,5或6.這也將消除需要停止第一個計時器,並開始新的一個。

因此有一個名爲State的類變量,其起始爲1.當在應用程序中發生某事時,將狀態設置爲2,並讓原始計時器繼續運行。

擁有6個完全相同的代碼塊幾乎可以保證您在某些時候更改代碼時,至少會在這6個副本中的一箇中出錯。

4

您需要將timer.Start調用放在Tick方法中。例如

private void timer1_Tick(object sender, EventArgs e) 
{ 
    // Make sure you stop the timer first 
    timer1.Stop(); 
    // Do something 
    timer1.Enabled = false; 
    timer2.Enabled = true; 
    timer2.Start(); 
} 

這當然不是前進的道路。實施一個Timer並使用應用程序狀態,您可以檢查以查看接下來應該調用哪個方法。這樣可以降低複雜性並使代碼簡單得多。例如

private void timer1_Tick(object sender, EventArgs e) 
{ 
    // Stop the timer 
    timer1.Stop(); 
    // Select which method should be called 
    switch (whatDoINeedToRun) 
    { 
     case "RunMeSecond": 
      // Do something 
      break; 
     case "RunMeThird": 
      // Do something 
      break; 
     case "RunMeFourth": 
      // Do something 
      break; 
     // etc. 
     default: 
      // This is the first method call 
      break; 
    } 
    // Restart the timer 
    timer1.Start(); 
} 
-1

而不是創建6個定時器,爲什麼不改變一個定時器的處理程序,並根據需要啓動/停止它?它看起來並不像你的計時器並行運行。