2014-08-31 6 views
-1

타이머가 완료 될 때까지 다음 행을 기다려야합니다.타이머가 끝날 때까지 기다리는 방법

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

timer1이 완료된 후에 labelStatus를 표시하려고합니다.

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 문에서 –

+2

'fromY == moveToY'를 기다리고있는 것처럼 보입니다.하지만 항상 5 픽셀 씩 움직이면 반드시 그럴 필요는 없습니다! 당신이 의미하는 바를 잘 모름 _ 나는 어쨌든 그것을 숨기지 않으므로 labelStatus를 보여주고 싶습니다. 또한 : 타이머는 '마침'하지 않습니다. – TaW

답변

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

0

두 번째 방법.

분명히 타이머에는 "OnStopped"이벤트가 없습니다 (처리를 시도하지 않는 한). 그러나 Timer에는 실행 중임을 알리는 플래그 (System.Timer.Timer.Enabled)가 있습니다.

깨끗한 해결책은 아니지만 false가 될 때까지 새 스레드와 폴링 "timer.Enabled"를 만들 수 있습니다.

관련 문제