Viewport3D kullanarak bir 3D wpf uygulaması yazıyorum. Kullanıcı bir düğmeye basıldığında, AxisAngleRotation3D
numaralı telefondan DoubleAnimation
'u başlatmalıyım, ancak senkronize yapılmalıdır. Bu animasyon animation.Completed
'da yapamıyorum çünkü bu animasyon bir sonraki ve bir sonraki sırayla çalıştırılıyor.WPF Senkronize animasyon ve UI iş parçacığı kilitlenmesi
ButtonHandler, UI iş parçacığı üzerinde çalışmalıdır, çünkü animasyonu hesaplamak için Viewport3D'yi kullanmıyorum.
Yani UI iş parçacığı senkronize animasyonunu başlatmalı ve sonra bitmiş çalışmayı bitirmeliyim.
Bu kodu çalıştı, ama kilitlenme neden: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();
bu kod tek bir yöntemde mi? –
Evet. @ d.moncada – Mateusz