如何强制动画等待整个渲染才能继续使用我的代码?
我有一个简单的动画,在相当重的网格上显示一个加载面板,我想这需要一些时间来使面板呈现淡入效果,在动画显示之前引发不完整的事件并且代码继续并启动一个空闲几秒钟(正确)应用程序的数据进程。这应该在面板在屏幕上有效呈现后开始!
答案 0 :(得分:0)
此动画是使用LayoutTransform
还是RenderTransform
?
如果LayoutTransform
那么我认为在动画完成事件中处理相关视觉的LayoutUpdated
事件。因此,当视觉实际上首先响应布局传递之后动画结束时,它可能是您的代码启动该新进程的正确位置。在该过程开始后,为同一个视觉效果取消挂起layoutupdated事件。
遗憾的是RenderTransform
除了CompositionTarget.Rendering
之外没有其他事件。您可以尝试在动画完成事件中显式处理此事件。此外,在动画完成后处理渲染事件时,请启动您的过程并取消渲染渲染事件。如果该应用程序处于脱钩状态,则此事件可能会使您的应用程序变慢。
如果您需要更多帮助,请与我们联系。
答案 1 :(得分:0)
您可以调用空的低优先级操作:
Dispatcher.CurrentDispatcher.Invoke(() => { }, DispatcherPriority.Background);
阻止代码执行,直到处理优先级高于DispatcherPriority.Background
的所有操作。因此,您可以确保在以更高优先级执行某些其他阻止代码之前处理了动画代码(并且动画逻辑仍保留在调度程序队列中)。