Freigeben über


BackgroundWorker.ReportProgress Methode

Definition

Löst das ProgressChanged-Ereignis aus.

Überlädt

ReportProgress(Int32)

Löst das ProgressChanged-Ereignis aus.

ReportProgress(Int32, Object)

Löst das ProgressChanged-Ereignis aus.

ReportProgress(Int32)

Quelle:
BackgroundWorker.cs
Quelle:
BackgroundWorker.cs
Quelle:
BackgroundWorker.cs

Löst das ProgressChanged-Ereignis aus.

public:
 void ReportProgress(int percentProgress);
public void ReportProgress (int percentProgress);
member this.ReportProgress : int -> unit
Public Sub ReportProgress (percentProgress As Integer)

Parameter

percentProgress
Int32

Bereits abgeschlossener Teil des Hintergrundvorgangs in Prozent (1-100).

Ausnahmen

Die WorkerReportsProgress-Eigenschaft ist auf false festgelegt.

Beispiele

Im folgenden Codebeispiel wird die Verwendung der ReportProgress -Methode veranschaulicht, um dem Benutzer den Fortschritt eines asynchronen Vorgangs zu melden. Dieses Codebeispiel ist Teil eines größeren Beispiels, das für die BackgroundWorker-Klasse bereitgestellt wird.

// Abort the operation if the user has cancelled.
// Note that a call to CancelAsync may have set 
// CancellationPending to true just after the
// last invocation of this method exits, so this 
// code will not have the opportunity to set the 
// DoWorkEventArgs.Cancel flag to true. This means
// that RunWorkerCompletedEventArgs.Cancelled will
// not be set to true in your RunWorkerCompleted
// event handler. This is a race condition.
if ( worker->CancellationPending )
{
   e->Cancel = true;
}
else
{
   if ( n < 2 )
   {
      result = 1;
   }
   else
   {
      result = ComputeFibonacci( n - 1, worker, e ) + ComputeFibonacci( n - 2, worker, e );
   }

   // Report progress as a percentage of the total task.
   int percentComplete = (int)((float)n / (float)numberToCompute * 100);
   if ( percentComplete > highestPercentageReached )
   {
      highestPercentageReached = percentComplete;
      worker->ReportProgress( percentComplete );
   }
}
// Abort the operation if the user has canceled.
// Note that a call to CancelAsync may have set 
// CancellationPending to true just after the
// last invocation of this method exits, so this 
// code will not have the opportunity to set the 
// DoWorkEventArgs.Cancel flag to true. This means
// that RunWorkerCompletedEventArgs.Cancelled will
// not be set to true in your RunWorkerCompleted
// event handler. This is a race condition.

if (worker.CancellationPending)
{   
    e.Cancel = true;
}
else
{   
    if (n < 2)
    {   
        result = 1;
    }
    else
    {   
        result = ComputeFibonacci(n - 1, worker, e) + 
                 ComputeFibonacci(n - 2, worker, e);
    }

    // Report progress as a percentage of the total task.
    int percentComplete = 
        (int)((float)n / (float)numberToCompute * 100);
    if (percentComplete > highestPercentageReached)
    {
        highestPercentageReached = percentComplete;
        worker.ReportProgress(percentComplete);
    }
}
' Abort the operation if the user has canceled.
' Note that a call to CancelAsync may have set 
' CancellationPending to true just after the
' last invocation of this method exits, so this 
' code will not have the opportunity to set the 
' DoWorkEventArgs.Cancel flag to true. This means
' that RunWorkerCompletedEventArgs.Cancelled will
' not be set to true in your RunWorkerCompleted
' event handler. This is a race condition.
If worker.CancellationPending Then
    e.Cancel = True
Else
    If n < 2 Then
        result = 1
    Else
        result = ComputeFibonacci(n - 1, worker, e) + _
                 ComputeFibonacci(n - 2, worker, e)
    End If

    ' Report progress as a percentage of the total task.
    Dim percentComplete As Integer = _
        CSng(n) / CSng(numberToCompute) * 100
    If percentComplete > highestPercentageReached Then
        highestPercentageReached = percentComplete
        worker.ReportProgress(percentComplete)
    End If

End If

Hinweise

Wenn Sie den Hintergrundvorgang benötigen, um den Fortschritt zu melden, können Sie die ReportProgress -Methode aufrufen, um das Ereignis auszulösen ProgressChanged . Der WorkerReportsProgress Eigenschaftswert muss truesein oder ReportProgress löst einen aus InvalidOperationException.

Es liegt an Ihnen, eine sinnvolle Methode zur Messung des Fortschritts Ihres Hintergrundvorgangs als Prozentsatz der gesamt abgeschlossenen Aufgabe zu implementieren.

Der Aufruf der ReportProgress -Methode ist asynchron und gibt sofort zurück. Der ProgressChanged Ereignishandler wird für den Thread ausgeführt, der den BackgroundWorkererstellt hat.

Weitere Informationen

Gilt für:

ReportProgress(Int32, Object)

Quelle:
BackgroundWorker.cs
Quelle:
BackgroundWorker.cs
Quelle:
BackgroundWorker.cs

Löst das ProgressChanged-Ereignis aus.

public:
 void ReportProgress(int percentProgress, System::Object ^ userState);
public void ReportProgress (int percentProgress, object userState);
public void ReportProgress (int percentProgress, object? userState);
member this.ReportProgress : int * obj -> unit
Public Sub ReportProgress (percentProgress As Integer, userState As Object)

Parameter

percentProgress
Int32

Bereits abgeschlossener Teil des Hintergrundvorgangs in Prozent (1-100).

userState
Object

Ein eindeutiges Object, das den Benutzerzustand angibt. Wird als UserState-Eigenschaft von ProgressChangedEventArgszurückgegeben.

Ausnahmen

Die WorkerReportsProgress-Eigenschaft ist auf false festgelegt.

Beispiele

Im folgenden Codebeispiel wird die Verwendung der ReportProgress -Methode veranschaulicht, um dem Benutzer den Fortschritt eines asynchronen Vorgangs zu melden. Dieses Codebeispiel ist Teil eines größeren Beispiels, das für die ToolStripProgressBar-Klasse bereitgestellt wird.

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
    // This method will run on a thread other than the UI thread.
    // Be sure not to manipulate any Windows Forms controls created
    // on the UI thread from this method.
    backgroundWorker.ReportProgress(0, "Working...");
    Decimal lastlast = 0;
    Decimal last = 1;
    Decimal current;
    if (requestedCount >= 1)
    { AppendNumber(0); }
    if (requestedCount >= 2)
    { AppendNumber(1); }
    for (int i = 2; i < requestedCount; ++i)
    {
        // Calculate the number.
        checked { current = lastlast + last; }
        // Introduce some delay to simulate a more complicated calculation.
        System.Threading.Thread.Sleep(100);
        AppendNumber(current);
        backgroundWorker.ReportProgress((100 * i) / requestedCount, "Working...");
        // Get ready for the next iteration.
        lastlast = last;
        last = current;
    }

    backgroundWorker.ReportProgress(100, "Complete!");
}
Private Sub backgroundWorker1_DoWork(sender As Object, e As DoWorkEventArgs)
   ' This method will run on a thread other than the UI thread.
   ' Be sure not to manipulate any Windows Forms controls created
   ' on the UI thread from this method.
   backgroundWorker.ReportProgress(0, "Working...")
   Dim lastlast As [Decimal] = 0
   Dim last As [Decimal] = 1
   Dim current As [Decimal]
   If requestedCount >= 1 Then
      AppendNumber(0)
   End If
   If requestedCount >= 2 Then
      AppendNumber(1)
   End If
   Dim i As Integer
   
   While i < requestedCount
      ' Calculate the number.
      current = lastlast + last
      ' Introduce some delay to simulate a more complicated calculation.
      System.Threading.Thread.Sleep(100)
      AppendNumber(current)
      backgroundWorker.ReportProgress(100 * i / requestedCount, "Working...")
      ' Get ready for the next iteration.
      lastlast = last
      last = current
      i += 1
   End While
   
   
   backgroundWorker.ReportProgress(100, "Complete!")
 End Sub

Hinweise

Wenn Sie den Hintergrundvorgang benötigen, um den Fortschritt zu melden, können Sie die ReportProgress -Methode aufrufen, um das Ereignis auszulösen ProgressChanged . Der WorkerReportsProgress Eigenschaftswert muss trueoder ReportProgress löst einen aus InvalidOperationException.

Es liegt an Ihnen, eine sinnvolle Methode zur Messung des Fortschritts Ihres Hintergrundvorgangs als Prozentsatz der gesamt abgeschlossenen Aufgabe zu implementieren.

Weitere Informationen

Gilt für: