0

我有一个用户控件,它的作用类似于进度条,并将矩形的宽度设置为对事件的响应。有人以特定的百分比引发事件,矩形宽度从其实际宽度动画到用户控件的实际宽度的百分比。

如果我尝试设置新的宽度,我会得到“调用线程无法访问这个对象,因为另一个线程拥有它。 ”所以我使用了 Dispatcher.Invoke,它运行良好。

如果我尝试为宽度更改设置动画而不是仅设置它,则会出现问题。然后我在使用调度程序时得到不同的线程拥有它错误事件。

所以。这段代码运行良好:

bar.Dispatcher.Invoke((Action)delegate { bar.Width = myWidth; });

但是这段代码没有:

DoubleAnimation widthAnimation = new DoubleAnimation();
widthAnimation.From = bar.ActualWidth;
widthAnimation.To = myWidth;
widthAnimation.Duration = new Duration(new TimeSpan(0, 0, 0, 0, 500));
widthAnimation.RepeatBehavior = new RepeatBehavior(1);
bar.Dispatcher.Invoke( (Action)delegate {
    bar.BeginAnimation(Rectangle.WidthProperty, widthAnimation); 
});

那么..我应该如何在像这样的用户控件上运行动画?

提前致谢 !!!

4

1 回答 1

1

动画也应该在 UI 线程中创建:

bar.Dispatcher.Invoke((Action)delegate
{
    var widthAnimation = new DoubleAnimation
    {
        From = bar.ActualWidth,
        To = myWidth,
        Duration = TimeSpan.FromMilliseconds(500)
    };
    bar.BeginAnimation(Rectangle.WidthProperty, widthAnimation); 
});
于 2013-01-14T10:22:15.140 回答