Compartilhar via


Visão geral sobre o componente BackgroundWorker

Há muitas operações mais comuns que podem levar um longo tempo para executar. Por exemplo:

  • Downloads de imagens

  • Invocações de serviço da Web

  • Arquivo downloads e uploads (inclusive para os aplicativos ponto a ponto)

  • Computações complexas de locais

  • Transações de banco de dados

  • Acesso de disco local, dado a sua velocidade lenta em relação ao acesso à memória

Operações como essas podem causar sua interface de usuário travar enquanto eles estão em execução. Quando você deseja uma interface de usuário responsiva e você enfrenta longos atrasos associados a essas operações, o BackgroundWorker componente fornece uma solução conveniente.

O BackgroundWorker componente oferece a capacidade de executar operações demoradas assincronamente ("em segundo plano"), em um thread diferente do principal UI thread. seu aplicativo Para usar um BackgroundWorker, você simplesmente dizer a ele qual método de trabalho demorado para executar em segundo plano e, em seguida, chame o RunWorkerAsync método. O thread de chamada continua a ser executados normalmente enquanto o método do operador é executado de forma assíncrona. Quando o método for concluído, o BackgroundWorker alerta o segmento de chamada ativando o RunWorkerCompleted evento, opcionalmente, que contém os resultados da operação.

O BackgroundWorker componente está disponível a partir de Toolbox, no componentes guia. Para adicionar um BackgroundWorker para seu formulário, arraste o BackgroundWorker o componente em seu formulário. Ele aparece na bandeja de componentes e suas propriedades são exibidas no Propriedades janela.

Para iniciar a operação assíncrona, use o RunWorkerAsync método. RunWorkerAsyncleva um opcional object parâmetro, que pode ser usado para passar argumentos para o seu método de trabalho. O BackgroundWorker classe expõe a DoWork evento, à qual o thread de trabalho está conectado por meio de um DoWork manipulador de eventos.

O DoWork manipulador de eventos leva um DoWorkEventArgs parâmetro, que tem um Argument propriedade. Esta propriedade recebe o parâmetro do RunWorkerAsync e pode ser passada para o seu método de trabalho, que será chamado na DoWork manipulador de eventos. O exemplo a seguir mostra como atribuir um resultado de um método de trabalho chamado ComputeFibonacci. Ele é parte de um exemplo maior, que pode ser encontrado em Como: Implementar um formulário que usa uma operação de plano de fundo.

' This event handler is where the actual work is done.
Private Sub backgroundWorker1_DoWork( _
ByVal sender As Object, _
ByVal e As DoWorkEventArgs) _
Handles backgroundWorker1.DoWork

    ' Get the BackgroundWorker object that raised this event.
    Dim worker As BackgroundWorker = _
        CType(sender, 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(e.Argument, worker, e)
End Sub 'backgroundWorker1_DoWork
// 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);
}
// This event handler is where the actual,
// potentially time-consuming work is done.
void backgroundWorker1_DoWork( Object^ sender, DoWorkEventArgs^ e )
{
   // Get the BackgroundWorker that raised this event.
   BackgroundWorker^ worker = dynamic_cast<BackgroundWorker^>(sender);

   // 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( safe_cast<Int32>(e->Argument), worker, e );
}

Para obter mais informações sobre o uso de manipuladores de eventos, consulte Eventos e representantes.

Aviso

Ao usar multithreading de qualquer tipo, potencialmente expor você mesmo a bugs muito sérios e complexos. Consulte o Práticas recomendadas de threads gerenciadas antes de implementar qualquer solução que usa multithreading.

Para obter mais informações sobre como usar o BackgroundWorker da classe, consulte Como: Executar uma operação em segundo plano.

Consulte também

Tarefas

Como: Implementar um formulário que usa uma operação de plano de fundo

Outros recursos

Multithreading in Visual Basic