Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 工作时制作动画_C#_Wpf_Vb.net_Animation_Controls - Fatal编程技术网

C# 工作时制作动画

C# 工作时制作动画,c#,wpf,vb.net,animation,controls,C#,Wpf,Vb.net,Animation,Controls,我的应用程序有一个自定义用户控件(带有动画的椭圆)。在我的主窗口中,我同时使用用户控件和按钮 按下按钮时,我需要设置控件的动画: private void button1_Click(object sender, RoutedEventArgs e) { for (int i = 0; i < 10; i++) { userControl11.BlueAnimate(); dowork1();

我的应用程序有一个自定义用户控件(带有动画的椭圆)。在我的主窗口中,我同时使用用户控件和按钮

按下按钮时,我需要设置控件的动画:

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        for (int i = 0; i < 10; i++)
        {
            userControl11.BlueAnimate();
            dowork1();
            userControl11.RedAnimate();
            dowork2();
        }
    }
当我投射
userControl11.BlueAnimate
时,它不会改变。可视化界面处于冻结状态,无法工作。有人能帮忙吗


谢谢您的时间。

sb.Begin()在哪里?在您的
AnimJob
操作中,您似乎从xaml资源中获得了情节提要,然后在下一行中不确定
sv
是什么(猜这是
sb
)<故事板的code>TargetName已在xaml中设置,因此不确定为什么要在代码隐藏中再次设置。最后,在完成所有这些之后,您似乎并没有真正“启动”动画。尝试在该动作的结尾添加一个
sb.Begin()
,您会看到动画效果良好。是的,我忘记粘贴sb.Begin())这不是问题,当我在按钮1中进行更改时,单击去掉dowork1和dowork2方法它的动画效果非常好,但是当动画开始后它有任何繁重的工作时,它会保持冻结,直到工作结束,这意味着dowork1()和dowork2()函数会阻塞UI线程。如果UI线程被阻止,那么不仅动画会被冻结,整个UI也会被冻结。单击按钮后,尝试拖动应用程序窗口,查看窗口是否移动。如果它看起来被卡住了,那么确实需要线程化的是您的dowork()函数。谢谢您,我已经让它工作了,请单击BackGroundWorker上的按钮
<UserControl.Resources>
    <Storyboard x:Name="Ellipse1Animation" x:Key="Ellipse1Animation">
        <DoubleAnimation
            x:Name="AnimacionEllipse"
            Storyboard.TargetName="_Ellipse"
            Storyboard.TargetProperty="Opacity"
            From="0.0" To="1.0" Duration="0:0:1"
            AutoReverse ="True"
            RepeatBehavior="Forever"
            />
    </Storyboard>
</UserControl.Resources>
   Public Sub BlueAnimate()
        Dim AnimJob As Action = Function()
               Dispatcher.Invoke(DirectCast(
                          Function()
                          Dim sb As Storyboard = FindResource("Ellipse1Animation")
                          Dim Anim As DoubleAnimation = sb.Children(0)
                          _Ellipse.Fill = Brushes.Blue
                          Storyboard.SetTargetName(Anim, "_Ellipse")
                          sb.Begin()
               End Function, Action))
               End Function
        Task.Factory.StartNew(AnimJob )
    End Sub