我想用一些自定义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&在里面... ...
有任何线索可以做到吗?
谢谢!
答案 0 :(得分:2)
我想说,不要使用while或任何其他循环,因为那时你将在循环运行时冻结你的程序。 最简单的方法(不一定是最好的方法)是设置一个定时器,每帧执行一次左右,每秒30-120次,并逐步检查定时器调用之间实际传递的实时时间。
因此,如果您需要以每秒10个单位的速度移动一个对象,并且您的计时器在某个快速间隔内执行,我会找到最后一个计时器调用的时间,当前时间,找到dT(时间变化),并做dT * 10,移动对象数量的单位。
当计时器迭代时,您应该看到对象移动而不冻结您的软件。