BackgroundWorker.DoWork Gebeurtenis
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Treedt op wanneer RunWorkerAsync() wordt aangeroepen.
public:
event System::ComponentModel::DoWorkEventHandler ^ DoWork;
public event System.ComponentModel.DoWorkEventHandler DoWork;
member this.DoWork : System.ComponentModel.DoWorkEventHandler
Public Custom Event DoWork As DoWorkEventHandler
Gebeurtenistype
Voorbeelden
In het volgende codevoorbeeld ziet u hoe de DoWork gebeurtenis wordt gebruikt om een asynchrone bewerking te starten. Dit codevoorbeeld maakt deel uit van een groter voorbeeld voor de BackgroundWorker klasse.
// 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.
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
Opmerkingen
Deze gebeurtenis wordt gegenereerd wanneer u de RunWorkerAsync methode aanroept. Hier start u de bewerking waarmee mogelijk tijdrovend werk wordt uitgevoerd.
Uw code in de DoWork gebeurtenis-handler moet regelmatig de CancellationPending eigenschapswaarde controleren en de bewerking afbreken als dit het geval is true. Wanneer dit gebeurt, kunt u de Cancel vlag van System.ComponentModel.DoWorkEventArgs op trueinstellen en wordt de Cancelled vlag van System.ComponentModel.RunWorkerCompletedEventArgs in uw RunWorkerCompleted gebeurtenis-handler ingesteld op true.
Caution
Houd er rekening mee dat uw code in de DoWork gebeurtenis-handler het werk kan voltooien als er een annuleringsaanvraag wordt gedaan en dat uw polling-lus mogelijk CancellationPending wordt ingesteld op true. In dit geval wordt de Cancelled vlag van System.ComponentModel.RunWorkerCompletedEventArgs uw RunWorkerCompleted gebeurtenis-handler niet ingesteld op true, ook al is er een annuleringsaanvraag ingediend. Deze situatie wordt een racevoorwaarde genoemd en is een veelvoorkomende zorg bij multithreaded programmeren. Zie Aanbevolen procedures voor beheerde threading voor meer informatie over ontwerpproblemen met meerdere threads.
Als uw bewerking een resultaat produceert, kunt u het resultaat toewijzen aan de DoWorkEventArgs.Result eigenschap. Deze is beschikbaar voor de RunWorkerCompleted gebeurtenis-handler in de RunWorkerCompletedEventArgs.Result eigenschap.
Als de bewerking een uitzondering genereert die uw code niet verwerkt, wordt de BackgroundWorker uitzondering onderschept en doorgegeven aan de RunWorkerCompleted gebeurtenis-handler, waar deze wordt weergegeven als de Error eigenschap van System.ComponentModel.RunWorkerCompletedEventArgs. Als u onder het Visual Studio foutopsporingsprogramma wordt uitgevoerd, wordt het foutopsporingsprogramma verbroken op het punt in de DoWork gebeurtenishandler waar de niet-verwerkte uitzondering is gegenereerd. Als u meer dan één BackgroundWorkerexemplaar hebt, moet u er niet rechtstreeks naar verwijzen, omdat dit uw DoWork gebeurtenis-handler koppelt aan een specifiek exemplaar van BackgroundWorker. In plaats daarvan moet u toegang krijgen tot uw BackgroundWorker door de sender parameter in uw DoWork gebeurtenis-handler te casten.
U moet ervoor zorgen dat u geen gebruikersinterfaceobjecten in uw DoWork gebeurtenis-handler bewerkt. In plaats daarvan communiceert u met de gebruikersinterface via de BackgroundWorker gebeurtenissen.
Zie Gebeurtenissen verwerken en genereren voor meer informatie over het afhandelen van gebeurtenissen.
Van toepassing op
Zie ook
- Handleiding: Een bewerking uitvoeren op de achtergrond
- Aanbevolen procedures voor beheerd draadbeheer
- Procedure: Een bestand downloaden op de achtergrond