1

我正在尝试在 Y 轴上进行 System.Windows.Shapes.Rectangle 旋转,模拟卡片旋转,显示所有路线。

问题是 UI 只在最后刷新。

简化版代码

方法调用

for (i=0; i<=180; i++)
{
    int j = i;
    Dispatcher.BeginInvoke(new a_dispatcher(() => {
            print_animation_of_card(card, i);
        }), 
        null);
}

方法

private void print_animation_of_card(System.Windows.Shapes.Rectangle card)
{
    ...
    System.Windows.Media.PlaneProjection p = 
        card.Projection as System.Windows.Media.PlaneProjection;
    p.RotationY = i;
    card.Projection = p;
}

我也尝试将 FOR 放入方法中,结果相同......

如何显示 System.Windows.Shapes.Rectangle 的所有旋转运动?

4

2 回答 2

0

我相信问题在于您使用BeginInvoke()的是Invoke. 这不会在调用下一个旋转角度之前等待一个旋转角度完成,因此所有调用都堆叠在彼此之上。

尝试一下Dispatcher.Invoke()或将整个循环放在一个循环中Dispatcher.BeginInvoke(),看看结果是否更令您满意。

于 2013-05-09T13:57:44.017 回答
0

最后我用 BackgroundWorker 完成了,感谢@Jay 的回答。

方法调用

BackgroundWorker bw = new BackgroundWorker();
bw.DoWork += (object sender, DoWorkEventArgs e) =>
{
    print_animation_of_card(card);
};
bw.RunWorkerAsync();

方法

private void print_animation_of_card(System.Windows.Shapes.Rectangle card)
{
    for (int i = 0; i <= 180; i++)
    {
        Thread.Sleep(3);
        Dispatcher.BeginInvoke(new a_dispatcher(() =>
        {
            //same code as topic method code
        }),null);
    }
}
于 2013-05-10T16:23:02.097 回答