用自定义While循环替换WPF Storyboard

时间:2012-04-16 20:49:43

标签: c# .net wpf storyboard

我想用一些自定义WHILE循环替换WPF Storyboard 以检查是否可行。我的代码是以下代码。

public void RestartAnimation(int seconds)
{
            da.From = this.ActualWidth; 
            da.To = -ContentActualWidth; 
            da.RepeatBehavior = RepeatBehavior.Forever;
            da.Duration = new Duration(TimeSpan.FromSeconds(seconds));
            Timeline.SetDesiredFrameRate(da, 15);

            if (sb.Children.Count == 0)
            {
                sb.Children.Add(da);
                Storyboard.SetTargetProperty(da, new PropertyPath("(Canvas.Left)"));
                Storyboard.SetTarget(da, cp);
                sb.Begin();
            }
}

我想应该是一些Timer&在里面... ...

有任何线索可以做到吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

我想说,不要使用while或任何其他循环,因为那时你将在循环运行时冻结你的程序。 最简单的方法(不一定是最好的方法)是设置一个定时器,每帧执行一次左右,每秒30-120次,并逐步检查定时器调用之间实际传递的实时时间。

因此,如果您需要以每秒10个单位的速度移动一个对象,并且您的计时器在某个快速间隔内执行,我会找到最后一个计时器调用的时间,当前时间,找到dT(时间变化),并做dT * 10,移动对象数量的单位。

当计时器迭代时,您应该看到对象移动而不冻结您的软件。