#c# #wpf #animation
#c# #wpf #Анимация
Вопрос:
Как я могу заставить анимацию дождаться полного рендеринга, прежде чем продолжить работу с моим кодом?
У меня есть простая анимация с отображением панели загрузки в довольно плотной сетке, я думаю, это займет некоторое время, чтобы панель отображалась с эффектом затухания, неудачно завершенное событие возникает до отображения анимации, и код продолжает работать и запускает процесс обработки данных, который простаивает в течение нескольких секунд (правильно)приложение. Это должно быть запущено после эффективного отображения панели на экране!
Ответ №1:
Выполняется ли эта анимация с LayoutTransform
помощью или RenderTransform
?
Если LayoutTransform
тогда я думаю, что в событии завершения анимации обрабатывается LayoutUpdated
событие соответствующего визуального изображения. Поэтому, вероятно, когда визуал фактически впервые ответит на прохождение макета после завершения анимации, это будет правильное место для yourcode, чтобы начать этот новый процесс. После запуска процесса отцепите событие layoutupdated для того же визуального изображения.
К сожалению RenderTransform
, такого события нет, кроме CompositionTarget.Rendering
. Вы можете попробовать явно обработать это событие в событии завершения анимации. Также, когда событие рендеринга обрабатывается после завершения анимации, запустите свой процесс и, пожалуйста, отключите событие рендеринга. Это событие может замедлить работу вашего приложения, если его не отключить.
Дайте мне знать, если вам понадобится дополнительная помощь.
Ответ №2:
Вы можете вызвать пустое действие с низким приоритетом:
Dispatcher.CurrentDispatcher.Invoke(() => { }, DispatcherPriority.Background);
Это блокирует выполнение кода до тех пор, пока не будут обработаны все действия с приоритетом выше DispatcherPriority.Background
, чем. Таким образом, вы можете убедиться, что ваш код анимации был обработан до того, как будет выполнен какой-либо другой блокирующий код с более высоким приоритетом (и логика анимации останется в очереди диспетчера).