0

我想用一些自定义的 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 & WHILE 里面......

任何线索如何做到这一点?

谢谢!!

4

1 回答 1

2

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

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

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

于 2012-04-20T20:17:53.187 回答