gpt4 book ai didi

WPF同步动画和UI线程死锁

转载 作者:行者123 更新时间:2023-12-04 13:39:36 28 4
gpt4 key购买 nike

我正在使用 Viewport3D 编写 3D wpf 应用程序。当用户按下按钮时,我必须启动 DoubleAnimationAxisAngleRotation3D ,但必须同步完成。我不能在 animation.Completed 上做,因为这个动画递归地运行下一个和下一个。

ButtonHandler 必须在 UI 线程上工作,因为我几乎不使用 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();

最佳答案

好吧,这只是一个想法。为什么不通过几个步骤创建这个动画。首先开始第一批动画,然后,当他们完成时运行另一组动画。您可以将其与某种计时器同步。

您可以首先创建要在每个步骤中运行的动画和对象的列表,然后调用它们。

关于WPF同步动画和UI线程死锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36954946/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com