プログレスバーのように機能し、イベントへの応答として長方形の幅をアニメーション化するユーザーコントロールがあります。誰かが特定の%でイベントを発生させ、長方形の幅が実際の幅からユーザーコントロールのactualWidthの%までアニメーション化されます。
新しい幅を設定しようとすると、「別のスレッドがオブジェクトを所有しているため、呼び出し元のスレッドはこのオブジェクトにアクセスできません。」というメッセージが表示されるので、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);
});
だから..このようなユーザーコントロールでアニメーションを実行するにはどうすればよいですか?
前もって感謝します !!!