Я пишу приложение 3D wpf с помощью Viewport3D. Когда пользователь нажимает кнопку, я должен начать DoubleAnimation
по телефону AxisAngleRotation3D
, но это должно быть сделано синхронно. Я не могу сделать это на animation.Completed
, потому что эта анимация запускает следующий и следующий рекурсивно.WPF Синхронная анимация и тупик пользовательского интерфейса
ButtonHandler должен работать с потоком пользовательского интерфейса, потому что для вычисления анимации я вряд ли использую Viewport3D.
Так что я должен в UI начать старт синхронной анимации и после этого завершить непрерывную работу.
Я попробовал этот код, но он вызывает тупиковая:
AxisAngleRotation3D axis;
DoubleAnimation animation;
DependencyProperty dp;
var worker = new Thread(() =>
{
Dispatcher.CurrentDispatcher.InvokeShutdown();
Dispatcher.Run();
});
worker.SetApartmentState(ApartmentState.STA);
worker.Start();
AutoResetEvent animationDone = new AutoResetEvent(false);
EventHandler handler = null;
handler = (sender, args) =>
{
animation.Completed -= handler; // remove self
animationDone.Set(); // signal completion
};
animation.Completed += handler;
Dispatcher.CurrentDispatcher.Invoke(new Action(() =>
{
axis.BeginAnimation(dp, animation);
}));
animationDone.WaitOne();
- это код в одном методе? –
Да. @ d.moncada – Mateusz