如何等待,直到定时器停止
问题描述:
我需要等待下一行等待,直到定时器完成。如何等待,直到定时器停止
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();
}
}
在此先感谢。
答
简单的解决方案,我能想到的就是这个
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
答
第二种方法。
显然,定时器没有“OnStopped”事件挂钩(除非你想尝试使用dispose)。然而,定时器有一个System.Timer.Timer.Enabled
标志用于告诉你它正在运行。
这不是一个干净的解决方案,但您可以创建一个新的线程和轮询“timer.Enabled”,直到它变成false。
Put labelStatus.Visibility = true;在else语句中 – 2014-08-31 12:29:57
看起来您正在等待'fromY == moveToY',但如果您始终移动5个像素,则这不一定是真实的!不知道你是什么意思_I我希望labelStatus可见_因为你永远不会隐藏它。另外:定时器不“完成”:你“停止”它们。 – TaW 2014-08-31 12:31:30