2014-08-31 52 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。