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