BackgroundWorker.DoWork Ereignis
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Tritt auf, wenn RunWorkerAsync() sie aufgerufen wird.
public:
event System::ComponentModel::DoWorkEventHandler ^ DoWork;
public event System.ComponentModel.DoWorkEventHandler DoWork;
public event System.ComponentModel.DoWorkEventHandler? DoWork;
member this.DoWork : System.ComponentModel.DoWorkEventHandler
Public Custom Event DoWork As DoWorkEventHandler
Ereignistyp
Beispiele
Im folgenden Codebeispiel wird die Verwendung des DoWork Ereignisses zum Starten eines asynchronen Vorgangs veranschaulicht. Dieses Codebeispiel ist Teil eines größeren Beispiels, das für die BackgroundWorker Klasse bereitgestellt wird.
// 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
Hinweise
Dieses Ereignis wird ausgelöst, wenn Sie die RunWorkerAsync Methode aufrufen. Hier starten Sie den Vorgang, der die potenziell zeitaufwendige Arbeit ausführt.
Der Code im DoWork Ereignishandler sollte in regelmäßigen Abständen den CancellationPending Eigenschaftswert überprüfen und den Vorgang truebei Bedarf abbrechen. In diesem Fall können Sie die Cancel Kennzeichnung auf System.ComponentModel.DoWorkEventArgstrue" festlegen, und das Cancelled Kennzeichen des System.ComponentModel.RunWorkerCompletedEventArgsRunWorkerCompleted Ereignishandlers wird auf " truefestgelegt.
Vorsicht
Beachten Sie, dass ihr Code im DoWork Ereignishandler seine Arbeit möglicherweise beendet, wenn eine Abbruchanforderung ausgeführt wird, und die Abfrageschleife kann nicht CancellationPending auf true"festgelegt" festgelegt werden. In diesem Fall wird das Cancelled Flag des System.ComponentModel.RunWorkerCompletedEventArgsRunWorkerCompleted Ereignishandlers nicht auf truefestgelegt, auch wenn eine Abbruchanforderung gestellt wurde. Diese Situation wird als Racebedingung bezeichnet und ist ein häufiges Anliegen bei der Multithread-Programmierung. Weitere Informationen zu Problemen mit dem Multithreading-Entwurf finden Sie unter "Bewährte Methoden für verwaltete Threading".
Wenn ihr Vorgang ein Ergebnis erzeugt, können Sie das Ergebnis der DoWorkEventArgs.Result Eigenschaft zuweisen. Dies ist für den RunWorkerCompleted Ereignishandler in der RunWorkerCompletedEventArgs.Result Eigenschaft verfügbar.
Wenn der Vorgang eine Ausnahme auslöst, die vom Code nicht behandelt wird, wird die BackgroundWorker Ausnahme abgefangen und an den RunWorkerCompleted Ereignishandler übergeben, in dem er als Error Eigenschaft verfügbar System.ComponentModel.RunWorkerCompletedEventArgsgemacht wird. Wenn Sie unter dem Visual Studio-Debugger ausgeführt werden, wird der Debugger an dem Punkt im DoWork Ereignishandler unterbrochen, an dem die unbehandelte Ausnahme ausgelöst wurde. Wenn Sie mehrere BackgroundWorkerhaben, sollten Sie nicht direkt darauf verweisen, da dies den DoWork Ereignishandler mit einer bestimmten Instanz von BackgroundWorker. Stattdessen sollten Sie darauf zugreifen BackgroundWorker , indem Sie den Parameter in den senderDoWork Ereignishandler umwandeln.
Sie müssen darauf achten, keine Benutzeroberflächenobjekte in Ihrem DoWork Ereignishandler zu bearbeiten. Kommunizieren Sie stattdessen über die BackgroundWorker Ereignisse mit der Benutzeroberfläche.
Weitere Informationen zum Behandeln von Ereignissen finden Sie unter Behandeln und Auslösen von Ereignissen.