2010-12-27 8 views
5

Estoy creando winform para procesar (convertir archivos txt a tiff) gran cantidad de archivos. Puse todo el código detrás de un botón (btnProcess). ¿Es esta una buena idea? Funciona, pero me di cuenta de que cuando me alejé del formulario win y volví a este, vi una ventana en blanco hasta que se completa el proceso. Escuché sobre el trabajador de fondo. ¿Cuál es el propósito del trabajador de fondo?¿Cómo mantengo una IU receptiva mientras proceso grandes cantidades de datos?

+1

intente hacer su pregunta lo más descriptiva posible para ayudar a otros usuarios que enfrentan problemas similares y también para atraer las mejores respuestas posibles. "pregunta de winform" no es probable que consiga ninguno de los dos objetivos. –

+0

Buena sugerencia. Me gusta el nuevo título, tiene más sentido. Simplemente no sabía esas palabras elegantes o jerga técnica. –

Respuesta

9

Lo que necesita aquí es multithreading. Eso significa que dos (o más) hilos de código se ejecutarán en paralelo. Uno de ellos sería el hilo de UI, el responsable de dibujar la ventana. En su caso, está ejecutando su código en el hilo de la interfaz de usuario y bloqueando así la representación de la interfaz de usuario mientras se ejecuta su código.

El propósito del BackgroundWorker es iniciar una operación en un nuevo hilo y es lo que necesita.

+0

Además, dado que se trata de una gran cantidad de archivos, es posible que desee considerar más de un subproceso de fondo para poder procesar varios archivos en paralelo –

+0

Absolutamente. Sin embargo, vale la pena señalar que esto beneficiará principalmente a las CPU multi-core (la mayoría de las CPU recientes de todos modos). Esto también será más fácil de lograr mediante el subprocesamiento múltiple de un bucle for usando algo así como las Extensiones paralelas en lugar de crear X BackgroundWorkers. –

+1

@Raj: debe tener cuidado cuando comience a hablar de File IO. Este es el proceso más lento y el multi-threading de un conjunto de operaciones de archivos no garantiza ningún aumento en el rendimiento. – IAbstract

3

BackgroundWorker class

La clase BackgroundWorker permite a ejecutar una operación en un hilo separado, dedicado. Las operaciones como y las descargas que consumen tiempo pueden hacer que su usuario interfaz (IU) parezca haya dejado de responder mientras están ejecutando . Cuando desee una interfaz de usuario receptiva y tenga que enfrentarse a largas demoras asociadas con dichas operaciones, la clase BackgroundWorker brinda una solución conveniente .

la página que vinculado anteriormente contiene un completo ejemplo BackgroundWorker.

+1

Si eres nuevo en el paradigma de multi-threading, sugiero que uses el background worker, es una abstracción de la programación multihilo. –

+0

Si estamos utilizando todos los métodos de servicio en modo asíncrono, Tarea. Entonces, puede degradar el rendimiento (en aplicaciones grandes)? –

+0

Esa es una pregunta muy amplia. Si ejecuta demasiadas tareas en paralelo, sobrecargará el sistema en algún momento. Sin embargo, sin más detalles, es imposible decir si significa 5 tareas o 100. –

2

Depende de su aplicación. Si se trata de una aplicación de propósito único que no es extremadamente larga y el único problema es que la pantalla no pinta. Que es lo que me parece, simplemente lanza una aplicación.hacerEventos en el circuito y termina con eso.

Cuestiones relacionadas