C# 多个Silverlight动画

C# 多个Silverlight动画,c#,silverlight,task,multithreading,C#,Silverlight,Task,Multithreading,我在silverlight应用程序中有2个自定义控件,每个控件都有自己的动画。我想按顺序播放所有动画,但当它们同时播放时,动画无法正常播放。我怎么能在他们之间耽搁呢 private void button1_Click(object sender, RoutedEventArgs e) { Dispatcher.BeginInvoke(() => { myCustomControl1.Play(); Thread.Sleep(200

我在silverlight应用程序中有2个自定义控件,每个控件都有自己的动画。我想按顺序播放所有动画,但当它们同时播放时,动画无法正常播放。我怎么能在他们之间耽搁呢

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            Dispatcher.BeginInvoke(() => { 
myCustomControl1.Play();
Thread.Sleep(200);
            Dispatcher.BeginInvoke(() => { myCustomControl2.Play(); });
        }

我假设您的控件使用故事板来播放动画。故事板有一个“已完成”事件,在它完成运行后触发。所以,你可以这样做:

public class CustomControl:Control
{
public override void ApplyTemplate()
{
   _storyBoard=GetTemplateChild("AnimationStoryBoard") as Storyboard;
   _storyBoard.Completed+=OnCompleted;
}
public event eventhandler AnimationCompleted;

public void Play()
{
   _storyBoard.Begin();
}

private void OnCompleted(object sender, EventArgs args)
{
    if(AnimationCompleted!=null)
        AnimationCompleted(this,EventArg.Empty);
}
}
然后,您可以将动画链接在一起:

myCustomControl1.AnimationCompleted+=RunSecondAnimation;
myCustomControl1.Play();

private void RunSecondAnimation(object sender, EventArgs args)
{
    myCustomControl2.Play();
}

现在我们可以保证动画2总是在动画1之后出现。

这些自定义控件是您编写的(本地代码)还是从第三方购买的(Telerik、Infrasgistics等)?我自己的控件。它们非常简单,只是一些图像控件和媒体元素。我如何在它们之间设置一些延迟?为什么不穿线呢?睡觉能行吗?我的动画是动态创建的。好的。我将事件处理程序放入自定义控件以控制动画。现在很好用。非常感谢。我想我需要一些silverlight线程的最佳实践。