У меня есть ситуация, где я анимирую часть своего приложения XAML, и я должен ожидать анимации И представляющий для завершения, прежде чем я смогу идти дальше в своем коде. До сих пор заключительная часть моей функции похожа:
ProcExpandCollapse.Begin();
while (ProcExpandCollapse.GetCurrentState() != ClockState.Stopped) { }
}
Который, в теории, будет ожидать, пока анимация не закончена. Но это не будет ожидать, пока рендеринг не закончен - поток, рисующий приложение, все еще, возможно, не перерисовал анимацию.
Анимация разворачивает UIElement и затем следующую часть моего использования кода, это представило размер, чтобы сделать некоторые вещи. Мой вопрос затем, как я ожидаю, пока мой Элемент UI не повторно представляется перед хождением дальше?
Наконец-то я нашел ответ (хотя за консультационные услуги пришлось заплатить)! По сути, в итоге я поместил фрагмент кода, который использует визуализированные элементы управления, в очередь диспетчера элементов управления с очень низким приоритетом, чтобы он выполнялся естественным образом перед обработкой этой задачи. Например:
mycontrol.Dispatcher.BeginInvoke((Action)delegate{textbox1.Text = "Grazie";});
mycontrol.Dispatcher.Invoke((Action)delegate{GetScreenshot();}, DispatcherPriority.Background);
Затем код будет продолжен после вызова и завершения GetScreenshot, что произойдет после завершения рендеринга (поскольку рендеринг имеет более высокий приоритет, чем фон).
У объекта раскадровки есть событие «Завершено», на которое вы можете подписаться. Он будет вызван, когда анимация будет завершена. Это то, что вы ищете?
В основном я думаю, что вам нужен "ProcExpandCollapse.Completed + =" (затем нажмите вкладку и выберите время просмотра, VS сгенерирует для вас фрагмент)