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

最後に、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 に答える
0

問題は、のBeginInvoke()代わりに使用していることだと思いますInvoke。これは、次の回転が呼び出される前に 1 つの回転角度が完了するのを待たないため、呼び出しはすべて互いに積み重ねられます。

試してみるDispatcher.Invoke()か、ループ全体を 1 つの中に入れてDispatcher.BeginInvoke()、満足のいく結果が得られるかどうかを確認してください。

于 2013-05-09T13:57:44.017 に答える