Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

Evento BackgroundWorker.DoWork

 

Publicado: noviembre de 2016

Se produce cuando RunWorkerAsync se llama.

Espacio de nombres:   System.ComponentModel
Ensamblado:  System (en System.dll)

public event DoWorkEventHandler DoWork

Este evento se provoca cuando se llama a la RunWorkerAsync (método). Esto es donde se inicia la operación que realiza el trabajo puede requerir mucho tiempo.

El código en el DoWork controlador de eventos debe comprobar periódicamente la CancellationPending valor de propiedad y anular la operación si es true. Cuando esto ocurre, puede establecer el Cancel marca de System.ComponentModel.DoWorkEventArgs a true, y el Cancelled marca de System.ComponentModel.RunWorkerCompletedEventArgs en su RunWorkerCompleted controlador de eventos se establecerá en true.

System_CAPS_cautionPrecaución

Tenga en cuenta que el código en el DoWork controlador de eventos puede finalizar su trabajo mientras se realiza una solicitud de cancelación y el bucle de sondeo podría pasar por alto CancellationPending se establece en true. En este caso, el Cancelled marca de System.ComponentModel.RunWorkerCompletedEventArgs en su RunWorkerCompleted controlador de eventos no se establecerá en true, incluso si se realizó una solicitud de cancelación. Esta situación se denomina un condición de carrera y es un problema habitual en la programación multiproceso. Para obtener más información acerca del diseño de multithreading problemas, vea Managed Threading Best Practices.

Si la operación produce un resultado, puede asignar el resultado a la DoWorkEventArgs.Result propiedad. Esta opción estará disponible para el RunWorkerCompleted controlador de eventos en el RunWorkerCompletedEventArgs.Result propiedad.

Si la operación provoca una excepción que el código no controla, el BackgroundWorker detecta la excepción y la pasa a la RunWorkerCompleted el controlador de eventos, donde se expone como la Error propiedad de System.ComponentModel.RunWorkerCompletedEventArgs. Si se ejecuta en el depurador de Visual Studio, el depurador se interrumpirá en el punto en el DoWork controlador de eventos que se generó la excepción no controlada. Si tiene más de una BackgroundWorker, no debe hacer referencia cualquiera de ellos directamente, como este modo se uniría su DoWork controlador de eventos a una instancia específica de BackgroundWorker. En su lugar, debe tener acceso a su BackgroundWorker convirtiendo el sender parámetro en su DoWork controlador de eventos.

Debe tener cuidado para no manipular los objetos de interfaz de usuario en su DoWork controlador de eventos. En su lugar, se comunican con la interfaz de usuario a través de la BackgroundWorker eventos.

Para obtener más información sobre el control de eventos, vea NIB: consumir eventos.

En el ejemplo de código siguiente se muestra el uso de la DoWork evento para iniciar una operación asincrónica. Este ejemplo de código forma parte de un ejemplo mayor proporcionado para el BackgroundWorker clase.

// This event handler is where the actual,
// potentially time-consuming work is done.
private void backgroundWorker1_DoWork(object sender, 
    DoWorkEventArgs e)
{   
    // Get the BackgroundWorker that raised this event.
    BackgroundWorker worker = sender as BackgroundWorker;

    // Assign the result of the computation
    // to the Result property of the DoWorkEventArgs
    // object. This is will be available to the 
    // RunWorkerCompleted eventhandler.
    e.Result = ComputeFibonacci((int)e.Argument, worker, e);
}

Plataforma universal de Windows
Disponible desde 10
.NET Framework
Disponible desde 2.0
Silverlight
Disponible desde 2.0
Windows Phone Silverlight
Disponible desde 7.0
Volver al principio
Mostrar: