2014-08-31 55 views
-1

我需要等待下一行等待,直到定時器完成。如何等待,直到定時器停止

public void animation(){ 
      timer1.start(); 
      labelStatus.Visibility=true; 
    } 

我希望labelStatus在timer1完成後可見。

private void timer1_Tick(object sender, EventArgs e) 
    { 
     int fromX = lblMove.Location.X; 
     int fromY = lblMove.Location.Y; 

     if (fromY > moveToY) 
     { 
      Y = Y - 5; 
      lblMove.Location = new Point(fromX, Y); 

     } 

     else if (fromY < moveToY) 
     { 
      Y = Y + 5; 
      lblMove.Location = new Point(fromX, Y); 
     } 
     else 
     { 
      timer1.Stop(); 
     } 
    } 

在此先感謝。

+0

Put labelStatus.Visibility = true;在else語句中 – 2014-08-31 12:29:57

+2

看起來您正在等待'fromY == moveToY',但如果您始終移動5個像素,則這不一定是真實的!不知道你是什麼意思_I我希望labelStatus可見_因爲你永遠不會隱藏它。另外:定時器不「完成」:你「停止」它們。 – TaW 2014-08-31 12:31:30

回答

1

簡單的解決方案,我能想到的就是這個

public void animation(){ 
    timer1.start(); 
    labelStatus.Visibility=false; 
} 

private void timer1_Tick(object sender, EventArgs e) 
{ 
    [...] 

    else if (fromY < moveToY) 
    { 
     Y = Y + 5; 
     lblMove.Location = new Point(fromX, Y); 
    } 
    else 
    { 
     timer1.Stop(); 

     labelStatus.Visibility = true; 
    } 
} 

這樣,當你停止你使標籤可見的計時器。還有很多其他方法可以做到這一點,但這應該很簡單。

+0

不,我不想使用它,因爲這是在一個循環內,它是一個動態的 – LIH 2014-08-31 12:49:51

0

第二種方法。

顯然,定時器沒有「OnStopped」事件掛鉤(除非你想嘗試使用dispose)。然而,定時器有一個System.Timer.Timer.Enabled標誌用於告訴你它正在運行。

這不是一個乾淨的解決方案,但您可以創建一個新的線程和輪詢「timer.Enabled」,直到它變成false。