2009-03-26 33 views
6

Tengo una serie de formularios y navego entre ellos.Cómo acelerar .NET winforms rendering

Cada formulario tiene un conjunto de controles para los cuales cargo propiedades desde la base de datos SQLite y esta es la operación larga (aproximadamente 1s) que no da a los usuarios la mejor sensación porque el formulario se está dibujando gradualmente.

No me importa el retraso, pero me gustaría que se dibujara el formulario cuando se cargan todos los datos. Me gustaría evitar nuevos subprocesos, ya que esto daría lugar a problemas de operación entre hilos.

¿Hay alguna buena solución aparte de acelerar toda la aplicación almacenando en caché los datos cargados?

Respuesta

0

Vuelta en los días de VB utilicé la API LockWindowUpdate. Como esto toma un identificador de ventana, también debería poder usarse con WinForms. Sin embargo, nunca lo intenté.

4

Hay una forma sencilla de acelerar el rendimiento percibido de muchos controles, especialmente los intensivos de datos como de listas, cuadros de lista, cuadros combinados, etc.

Antes de rellenar los llaman el método BeginUpdate() y llamar al cuando se hace EndUpdate(). Esto desactiva el redibujado del control hasta que haya terminado de llenarlo con datos.

1

He encontrado que cargar controles de Winform, como cuadros combinados y cuadros de lista, se cargan mucho más rápido cuando apuntan a Vistas en lugar de una tabla en sí, especialmente si puede limitar la vista para ser más delgado en comparación con el control mirar a través de una mesa completa.

2

Lo siento. Esto es para lo que es el enhebrado. Los "problemas de operación entre hilos" están bien definidos y existen patrones comunes para tratarlos. Simplemente reduzca los lugares donde los hilos interactúan al mínimo (en este caso, sería un solo lugar, después de cargar los datos) y se vuelve trivial.

También hay algunas clases que hacen que el subprocesamiento múltiple en una aplicación de winforms sea mucho más fácil, ya que abstraen la interacción entre los subprocesos. El BackgroundWorker (enlace a la publicación del blog al respecto) realizará el trabajo en otro hilo por ti y te notificará cuando lo haga activando un evento en el hilo de la interfaz de usuario. Obtienes los beneficios del multihilo sin ninguno de los inconvenientes.