2011-10-14 5 views
8

¿Hay alguna manera de detener todos los comandos de actualización de UI en Winforms?¿Puedo congelar mi representación de UI mientras se carga mi formulario?

O tengo la ligera sensación de que estoy tratando de hacer esto de una manera completamente incorrecta, así que hay otra forma de solucionar mi problema: básicamente cargo un estado guardado de un control, que carga nuevos controles sobre él. Sin embargo, hago algo de esto en el hilo de la interfaz de usuario, y parte de la carga de datos de otro hilo, que luego llena la interfaz de usuario.

Así que el efecto que tengo cuando se está cargando es que el usuario puede ver algunos de los controles que aparecen en un solo lugar, a continuación, se desplazan a otro lugar en el formulario, el cambio de valores, etc.

que había desea obtener una pantalla de carga en lugar de esto y cargar los controles en segundo plano. Es una aplicación bastante grande y no es TAN importante, por lo que rediseñar mi código no es realmente una opción.

¿Puedo simplemente detener todos los comandos Update() en un control mientras se está ejecutando un método?

+0

mi sugerencia - no muestran la forma mientras que su prestación. Si congela el usuario de la interfaz de usuario puede ver el formulario vacío y después de un auge de tiempo aparecen todos los controles. – Reniuz

+0

Está bien, lo siento, no explico este poco. El formulario predeterminado contiene una versión en blanco de este control y luego el usuario puede arrastrar los controles y seleccionar ciertas opciones, agregar nuevos controles, etc., luego guardar el estado del control en XML. Esta pregunta es para cuando el usuario decide abrir un archivo existente. – Connell

Respuesta

12

Puede usar los métodos SuspendLayout y ResumeLayout para ajustar la configuración de la IU en una sola operación (sin la actualización de la representación).

Básicamente (suponiendo SomeMethod está en la clase de formulario):

private void SomeMethod() 
{ 
    this.SuspendLayout(); 
    // all UI setup 
    this.ResumeLayout(); 
} 
+1

Brillante, sabía que sería algo simple, solo estaba buscando en Google las cosas equivocadas, parece. ¡Gracias! – Connell

+0

Desafortunadamente, no funciona cuando el formulario ya está visible. Hay una manera mejor: http://stackoverflow.com/questions/13711812/parallel-generation-of-ui/15020157#15020157 –

4

que realmente depende de la lógica de la forma, en general, no se debe sobrecargar el método Load o Show con demasiado las cosas para que la forma puede mostrarse y dibujarse rápidamente y siempre lucir receptivo.

en algunos casos podría ayudar a utilizar el SuspendLayout y métodos ResumeLayout, ver aquí: Control.SuspendLayout Method

+0

No está en la carga. La carga de control se encuentra inicialmente en el código del diseñador, que carga un control en blanco, como tal. Pero hay un método LoadData en el control que está cargando el estado del formulario desde un archivo XML después de que se le pide al usuario que abra un archivo. – Connell

Cuestiones relacionadas