Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Er zijn veel vaak uitgevoerde bewerkingen die lang kunnen duren voordat ze worden uitgevoerd. Voorbeeld:
Downloads van afbeeldingen
Webservice-aanroepen
Bestandsdownloads en -uploads (inclusief voor peer-to-peer-toepassingen)
Complexe lokale berekeningen
Databasetransacties
Toegang tot lokale schijven, gezien de trage snelheid ten opzichte van geheugentoegang
Bewerkingen zoals deze kunnen ertoe leiden dat uw gebruikersinterface wordt geblokkeerd terwijl ze worden uitgevoerd. Wanneer u een responsieve gebruikersinterface wilt en u te maken hebt met lange vertragingen die zijn gekoppeld aan dergelijke bewerkingen, biedt het BackgroundWorker-onderdeel een handige oplossing.
Het BackgroundWorker-onderdeel biedt u de mogelijkheid om tijdrovende bewerkingen asynchroon ('op de achtergrond') uit te voeren op een thread die verschilt van de hoofd-UI-thread van uw toepassing. Als u een BackgroundWorkerwilt gebruiken, geeft u aan welke tijdrovende werkmethode op de achtergrond moet worden uitgevoerd en roept u vervolgens de RunWorkerAsync methode aan. De aanroepende thread blijft normaal draaien terwijl de werkermethode asynchroon wordt uitgevoerd. Wanneer de methode is voltooid, waarschuwt de BackgroundWorker de aanroepende thread door de RunWorkerCompleted gebeurtenis te activeren, die eventueel de resultaten van de bewerking bevat.
Het BackgroundWorker onderdeel is beschikbaar via de Werksetop het tabblad Onderdelen. Als u een BackgroundWorker aan het formulier wilt toevoegen, sleept u het BackgroundWorker onderdeel naar het formulier. Deze wordt weergegeven in het onderdeelvak en de eigenschappen worden weergegeven in het venster Eigenschappen.
Gebruik de methode RunWorkerAsync om de asynchrone bewerking te starten.
RunWorkerAsync gebruikt een optionele object parameter, die kan worden gebruikt om argumenten door te geven aan uw werkmethode. De BackgroundWorker-klasse stelt de DoWork-gebeurtenis bloot, waaraan uw worker thread is gekoppeld met een DoWork-eventhandler.
De DoWork event handler neemt een DoWorkEventArgs parameter, die een Argument eigenschap heeft. Deze eigenschap ontvangt de parameter van RunWorkerAsync en kan doorgegeven worden aan uw werkmethode, die wordt aangeroepen in de DoWork eventhandler. In het volgende voorbeeld ziet u hoe u een resultaat van een werkmethode met de naam ComputeFibonaccitoewijst. Het maakt deel uit van een groter voorbeeld, dat u kunt vinden op Procedure: Een formulier implementeren dat gebruikmaakt van een achtergrondbewerking.
// 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 );
}
// 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 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
Zie Gebeurtenissenvoor meer informatie over het gebruik van gebeurtenis-handlers.
Waarschuwing
Wanneer u multithreading van elke soort gebruikt, kunt u uzelf blootstellen aan zeer ernstige en complexe bugs. Raadpleeg de aanbevolen procedures voor managed threading voordat u een oplossing implementeert die gebruikmaakt van multithreading.
Zie BackgroundWorkervoor meer informatie over het gebruik van de klasse .
Zie ook
.NET Desktop feedback