La clase BackgroundWorker permite ejecutar una operación en un subproceso dedicado e independiente. Durante la ejecución de operaciones que exigen mucho tiempo, como las descargas y las transacciones de las bases de datos, puede parecer que la interfaz de usuario (UI) ha dejado de responder. Cuando se necesita una interfaz de usuario rápida, pero se producen largos retrasos asociados a tales operaciones, la clase BackgroundWorker ofrece una práctica solución.
Para ejecutar en segundo plano una operación que exija mucho tiempo, cree un objeto BackgroundWorker y realice escuchas de eventos que creen informes del progreso de la operación y que señalen su finalización. Se puede crear BackgroundWorker mediante programación o arrastrarlo al formulario desde la ficha Componentes del Cuadro de herramientas. Si crea BackgroundWorker en el Diseñador de Windows Forms, aparecerá en la Bandeja de componentes y sus propiedades se mostrarán en la ventana Propiedades.
Para configurar una operación en segundo plano, agregue un controlador de eventos para el evento DoWork. En este controlador de eventos, llame a la operación que requiere mucho tiempo. Para iniciar la operación, llame a RunWorkerAsync. Para recibir notificaciones sobre las actualizaciones de progreso, controle el evento ProgressChanged. Para recibir una notificación cuando finalice la operación, controle el evento RunWorkerCompleted.
Nota |
|---|
| Tenga cuidado para no manipular ningún objeto de la interfaz de usuario en el controlador de eventos DoWork. En su lugar, comuníquese con la interfaz de usuario a través de los eventos ProgressChanged y RunWorkerCompleted.
No se calculan referencias a los eventos BackgroundWorker a través de los límites de AppDomain. No utilice un componente BackgroundWorker para realizar operaciones multiproceso en más de un objeto AppDomain. |
Si la operación en segundo plano requiere un parámetro, llame a RunWorkerAsync con el parámetro. Dentro del controlador de eventos DoWork, puede extraer el parámetro de la propiedad DoWorkEventArgs.Argument.
Para obtener más información sobre BackgroundWorker, vea Cómo: Ejecutar una operación en segundo plano.