BackgroundWorker.RunWorkerCompleted 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 der Hintergrundvorgang abgeschlossen wurde, abgebrochen oder eine Ausnahme ausgelöst wurde.
public:
event System::ComponentModel::RunWorkerCompletedEventHandler ^ RunWorkerCompleted;
public event System.ComponentModel.RunWorkerCompletedEventHandler RunWorkerCompleted;
public event System.ComponentModel.RunWorkerCompletedEventHandler? RunWorkerCompleted;
member this.RunWorkerCompleted : System.ComponentModel.RunWorkerCompletedEventHandler
Public Custom Event RunWorkerCompleted As RunWorkerCompletedEventHandler
Ereignistyp
Beispiele
Im folgenden Codebeispiel wird die Verwendung des RunWorkerCompleted Ereignisses zum Behandeln des Ergebnisses eines asynchronen Vorgangs veranschaulicht. Dieses Codebeispiel ist Teil eines größeren Beispiels, das für die BackgroundWorker Klasse bereitgestellt wird.
// This event handler deals with the results of the
// background operation.
void backgroundWorker1_RunWorkerCompleted( Object^ /*sender*/, RunWorkerCompletedEventArgs^ e )
{
// First, handle the case where an exception was thrown.
if ( e->Error != nullptr )
{
MessageBox::Show( e->Error->Message );
}
else
if ( e->Cancelled )
{
// Next, handle the case where the user cancelled
// the operation.
// Note that due to a race condition in
// the DoWork event handler, the Cancelled
// flag may not have been set, even though
// CancelAsync was called.
resultLabel->Text = "Cancelled";
}
else
{
// Finally, handle the case where the operation
// succeeded.
resultLabel->Text = e->Result->ToString();
}
// Enable the UpDown control.
this->numericUpDown1->Enabled = true;
// Enable the Start button.
startAsyncButton->Enabled = true;
// Disable the Cancel button.
cancelAsyncButton->Enabled = false;
}
// This event handler deals with the results of the
// background operation.
void backgroundWorker1_RunWorkerCompleted(
object sender, RunWorkerCompletedEventArgs e)
{
// First, handle the case where an exception was thrown.
if (e.Error != null)
{
_ = MessageBox.Show(e.Error.Message);
}
else if (e.Cancelled)
{
// Next, handle the case where the user canceled
// the operation.
// Note that due to a race condition in
// the DoWork event handler, the Cancelled
// flag may not have been set, even though
// CancelAsync was called.
resultLabel.Text = "Canceled";
}
else
{
// Finally, handle the case where the operation
// succeeded.
resultLabel.Text = e.Result.ToString();
}
// Enable the UpDown control.
numericUpDown1.Enabled = true;
// Enable the Start button.
startAsyncButton.Enabled = true;
// Disable the Cancel button.
cancelAsyncButton.Enabled = false;
}
' This event handler deals with the results of the
' background operation.
Private Sub backgroundWorker1_RunWorkerCompleted(
ByVal sender As Object, ByVal e As RunWorkerCompletedEventArgs) _
Handles backgroundWorker1.RunWorkerCompleted
' First, handle the case where an exception was thrown.
If (e.Error IsNot Nothing) Then
MessageBox.Show(e.Error.Message)
ElseIf e.Cancelled Then
' Next, handle the case where the user canceled the
' operation.
' Note that due to a race condition in
' the DoWork event handler, the Cancelled
' flag may not have been set, even though
' CancelAsync was called.
resultLabel.Text = "Canceled"
Else
' Finally, handle the case where the operation succeeded.
resultLabel.Text = e.Result.ToString()
End If
' Enable the UpDown control.
numericUpDown1.Enabled = True
' Enable the Start button.
startAsyncButton.Enabled = True
' Disable the Cancel button.
cancelAsyncButton.Enabled = False
End Sub
Hinweise
Dieses Ereignis wird ausgelöst, wenn der DoWork Ereignishandler zurückgegeben wird.
Wenn der Vorgang erfolgreich abgeschlossen ist und dessen DoWork Ergebnis im Ereignishandler zugewiesen wird, können Sie über die RunWorkerCompletedEventArgs.Result Eigenschaft auf das Ergebnis zugreifen.
Die Error Eigenschaft gibt System.ComponentModel.RunWorkerCompletedEventArgs an, dass eine Ausnahme vom Vorgang ausgelöst wurde.
Die Cancelled Eigenschaft des System.ComponentModel.RunWorkerCompletedEventArgs Objekts gibt an, ob eine Abbruchanforderung vom Hintergrundvorgang verarbeitet wurde. Wenn Ihr Code im DoWork Ereignishandler eine Abbruchanforderung erkennt, indem die CancellationPending Kennzeichnung überprüft und das Cancel Kennzeichen trueSystem.ComponentModel.DoWorkEventArgs auf "" festgelegt wird, wird auch das Cancelled Kennzeichen System.ComponentModel.RunWorkerCompletedEventArgs auf "true.
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".
Der RunWorkerCompleted Ereignishandler sollte vor dem Zugriff auf die RunWorkerCompletedEventArgs.Result Eigenschaft immer die AsyncCompletedEventArgs.Error Eigenschaften AsyncCompletedEventArgs.Cancelled überprüfen. Wenn eine Ausnahme ausgelöst wurde oder der Vorgang abgebrochen wurde, löst der Zugriff auf die RunWorkerCompletedEventArgs.Result Eigenschaft eine Ausnahme aus.