2014-02-05 15 views
0

當地板按鈕被電梯內的人員按下時,它會調用ChangeFloor方法來增加/減少所選電梯的水平。兩個參數傳遞給ChangeFloor函數;電梯的標籤(樓層指示器)和按鈕以通過btn.Name獲取他們所在的樓層。試圖實現一個計時器,但似乎無法讓它開始?通過工具欄創建'timer1'。如何在電梯中安裝定時器以延遲樓層更換?

private void FloorButtonClick(object sender, EventArgs e) 
    { 
     Button btn = (Button)sender; 
     if (Convert.ToInt16(btn.Name) > 40) 
      if (Convert.ToInt16(btn.Name) > 80) 
       if (Convert.ToInt16(btn.Name) > 120) 
        ChangeFloor(lblLiftFloor4, btn); 
       else 
        ChangeFloor(lblLiftFloor3, btn); 
      else 
       ChangeFloor(lblLiftFloor2, btn); 
     else 
      ChangeFloor(lblLiftFloor1, btn); 
    } 

private void ChangeFloor(Label lift, Button btn) 
    { 
     int level = Convert.ToInt16(lift.Text); 
     int desired = Convert.ToInt16(btn.Tag); 

     while(level!=desired) 
     { 
      if (level > desired) 
      { 
       timer1.Start(); 
       lift.Text = (--level).ToString(); 
      } 
      else 
      { 
       timer1.Start(); 
       lift.Text = (++level).ToString(); 
      } 

     } 
    } 
+0

你有任何代碼處理定時器的'Elapsed'事件?作爲參考,[計時器文檔](http://msdn.microsoft.com/en-us/library/system.timers.timer(v = vs.110).aspx)。 'timer1.Start()'只是開始提高已經過的事件,你仍然需要處理它。 – JakeP

+0

我試圖通過添加一個ElapsedEventHandler,但然後我想鏈接到ChangeFloor(標籤,按鈕),但它似乎並沒有工作 – matt9251

回答

0

我不知道你正在嘗試做的正是...如果你只是想模擬地面的變化,並引入延遲,你可以隨便扔在Sleep聲明,這將導致您的應用暫停一段時間。

private void ChangeFloor(Label lift, Button btn) 
{ 
    int level = Convert.ToInt16(lift.Text); 
    int desired = Convert.ToInt16(btn.Tag); 

    while(level!=desired) 
    { 
     Thread.Sleep(3000); // <--- Pause for 3 seconds... 
     if (level > desired) 
     { 
      lift.Text = (--level).ToString(); 
     } 
     else 
     { 
      lift.Text = (++level).ToString(); 
     } 

    } 
} 

編輯:閱讀線程,因爲如果你想要一堆獨立電梯。線程是你可以實現,以實現你要找的行爲是什麼:

http://msdn.microsoft.com/en-us/library/System.Threading(v=vs.110).aspx

+0

對不起,虐待嘗試澄清。我有4部電梯應該相互獨立使用,這不會導致它們變成靜電,而線程睡覺時它應該只是一個電梯?想要在其中加入一個定時器,以便它確實做到這一點,但只暫停一個。編輯:也注意到,這似乎暫停線程,然後跳樓說30樓到17直,而不是逐步這樣做。 – matt9251

+0

@ matt9251那麼取決於你如何實現電梯本身。如果每個人都在自己的線程中運行,那麼進行睡眠只會影響當前的線程。不知道你如何執行其餘部分。只要在其中設置一箇中斷點,您就可以看到發生了什麼,因爲它不應該「跳躍」,除非它是UI問題。 – Kelsey

+0

目前不幸,它們都在同一個線程中。我穿過它,它增加了地板的增減量,但似乎無法將其直觀地輸出到形式上,這使得我相信它在完成整個功能之前不會改變數字 – matt9251