2014-09-03 3 views
0

이것은 애니메이션 카운트 다운을위한 코드입니다. bandera_countdown == false이면 타이머가 중지되고 다시 설정되어야합니다. 그것은 리셋되지만, 리셋 후에도 countdownStoryboard.Completed + = CountdownTimer_Completed가 실행되기 때문에 백그라운드에서 계속 작동합니다.카운트 다운 애니메이션을 리셋합니다. C# WPF

private void StartCountdown(FrameworkElement target) 
    { 
     var countdownAnimation = new StringAnimationUsingKeyFrames(); 
     var countdownStoryboard = new Storyboard(); 
     if (bandera_countdown == true) 
     { 
      for (var i = 10; i > 0; i--) 
      { 
       var keyTime = TimeSpan.FromSeconds(10 - i); 
       var frame = new DiscreteStringKeyFrame(i.ToString(), KeyTime.FromTimeSpan(keyTime)); 
       countdownAnimation.KeyFrames.Add(frame); 
      } 
      countdownAnimation.KeyFrames.Add(new DiscreteStringKeyFrame(" ", KeyTime.FromTimeSpan(TimeSpan.FromSeconds(11)))); 
      Storyboard.SetTargetName(countdownAnimation, target.Name); 
      Storyboard.SetTargetProperty(countdownAnimation, new PropertyPath(TextBlock.TextProperty)); 

      countdownStoryboard.Children.Add(countdownAnimation); 
      countdownStoryboard.Completed += CountdownTimer_Completed; 

      countdownStoryboard.Begin(this); 

     } 
     else 
     { 
      countdownStoryboard.Stop(); 
      countdownStoryboard.Remove(); 

     } 

    } 

타이머를 멈추고 10 초 후에 다시 시작할 수 있습니까? 감사합니다.

답변

0

bandera_countdown은 어디에서나 false로 설정되어 있습니까?

for 문 안에 if 문이있을 수 있습니다. i == 1이면 (i == 0이면 원한다면) bandera_countdown을 false로 설정하십시오.

for 루프를 시작하는 행의 조건을 변경하여 i> 0이라고 말하면 i> = 0으로 변경하여 i == 0 일 때라도 실행해야합니다.

나는 당신이 원하는 것을 이해하고 있다고 생각하는데, for 루프를 의미한다. keyTime이 0에서 10으로 갈 예정이지만 10으로 돌아 가지 않는 것 같니? 그것은 i> 0으로 앞에서 언급 한 것 때문일 수 있습니다. for 루프의 마지막 반복은 i == 1 일 때가 될 것입니다.

나는 이것이 도움이 되었으면 좋겠지 만 ... 그리고 걱정하지 마라. 곧 다른 응답을 얻을 수 있어야한다. 여기에있는 사람들은 대개 매우 도움이된다. :)

내가 가지고있는 또 다른 생각은 다음과 같다. 루프와 10의 초기 값을주고 기본적으로 for 루프에서 발생하는 것과 똑같은 일을합니다. 즉, 매번 i 값을 줄이고 for 루프에서 if 문을 사용할 수 있습니다. keyTime의 값을 10으로 설정하고 bandera_countdown을 false로 설정하고 다른 작업을 수행 할 수 있습니다.

+0

감사합니다. bandera_countdown은 false로 설정됩니다. 문제가 발생하면 타이머가 10으로 재설정되지만 계속 실행됩니다. 예를 들어, 카운트 다운이 완료되면 (0과 같음) 이벤트 핸들러가 실행되므로 bandera_countdown이 false로 설정된 경우 카운트 다운이 3 초가되어 카운트 다운이 재설정되고 10 초가 표시되고 다시 카운트 다운되기 시작합니다 핸들러가 작동하는 초. 나는 나 자신을 설명 할 지 모르겠다. – user3634248