2010-06-07 11 views
5

Tengo una situación en la que estoy animando parte de mi aplicación XAML, y tengo que esperar a que se complete la animación Y el renderizado antes de continuar con mi código. Hasta ahora, el final de mi función se ve así:Espere a que se complete la animación, renderizar XAML y C#

ProcExpandCollapse.Begin(); 
    while (ProcExpandCollapse.GetCurrentState() != ClockState.Stopped) { } 
} 

Que, en teoría, esperará hasta que termine la animación. Pero no esperará hasta que finalice la renderización: es posible que el hilo que dibuja la aplicación no haya vuelto a dibujar la animación.

La animación está expandiendo un UIElement, y luego la siguiente parte de mi código usa su tamaño para hacer algunas cosas. Mi pregunta es, ¿cómo espero hasta que se vuelva a renderizar mi elemento UI antes de continuar?

Respuesta

6

finalmente encontrado una respuesta (aunque tuve que pagar por los servicios de consultoría)! Esencialmente, lo que terminé haciendo fue poner un poco de código que usa los controles representados en la cola del asignador de control con muy baja prioridad, por lo que se procesa de forma natural antes de manejar esa tarea. Por ejemplo:

mycontrol.Dispatcher.BeginInvoke((Action)delegate{textbox1.Text = "Grazie";}); 
mycontrol.Dispatcher.Invoke((Action)delegate{GetScreenshot();}, DispatcherPriority.Background); 

El código será entonces PROCEDE después GetScreenshot se llama y terminó, que será una vez finalizada la prestación (ya que la visualización tiene mayor prioridad que el fondo).

0

El objeto Storyboard tiene un evento 'Completed' al que puede suscribirse. Se llamará cuando la animación termine. Esto es lo que estás buscando?

Básicamente creo que quiera "ProcExpandCollapse.Completed + =" (entonces pestaña alcanzó un Ver tiempos, VS generará un fragmento para usted)

+1

No, estoy esperando esperar hasta que se complete la * representación *. –

Cuestiones relacionadas