2011-02-01 4 views
6

Estoy utilizando Dispatcher.PushFrame para bloquear mi código y permitir que la IU se actualice hasta que se realice un proceso de ejecución prolongado. Esto funciona como se espera, siempre que mi llamada a Dispatcher.PushFrame provenga de un evento de clic de botón. Sin embargo, si utilizo este mismo código durante el evento o constructor de Page de Loaded, la UI no se actualiza y, por lo tanto, nunca se pinta. Como experimento aleatorio, traté de usar Window.ShowDialog desde el constructor, y permite que la UI pinte, incluso aunque el control esté bloqueado hasta que se cierre el cuadro de diálogo modal. ¿Alguien puede ofrecer una solución para permitir esta funcionalidad del evento Page Loaded usando Dispatcher.PushFrame u otro mecanismo manual?Necesito ayuda con el bloqueo del proceso de estilo Dispatcher.PushFrame en la página WPF

Como una adición, si minimizo o maximizo mi ventana, la UI pinta y puedo interactuar con ella normalmente, pero no hasta que realice manualmente el cambio de tamaño.

+0

si a alguien le importa, hay más información de contexto sobre esta cuestión en [msdn forums] (http://social.msdn.microsoft.com/Forums/en/wpf/thread/e2c85fa9-09c2-4eb1-bdd7 -78d8f2d6aaf3). (incluso está marcado como respondido allí ...) –

+0

@ user598946, su pregunta realmente fue respondida en los foros de MSDN. ¿Hay algo en esa respuesta que no tienes claro? –

Respuesta

3

De mis lecturas en MSDN en Object Lifetime Events y haciendo campaña en torno a Reflector parece que los Loaded y Unloaded acontecimientos no son criados en la misma forma que otros eventos. Internamente se usa una clase BroadcastEventHelper, que coordina los diversos eventos Loaded entre cada elemento en el árbol visual antes de elevarlos finalmente al nivel DispatcherPriority.Loaded.

Creo que esta es la razón por la que está viendo este comportamiento.

En cuanto a una solución concreta, me sugieren las tareas en ejecución largos no ser colocados en el controlador Page.Loaded evento y en su lugar un BackgroundWorker o Task ser emitidas para completar el trabajo.

Cuestiones relacionadas