BackgroundWorker.ReportProgress Methode

Definitie

Hiermee wordt de ProgressChanged gebeurtenis gegenereerd.

Overloads

Name Description
ReportProgress(Int32)

Hiermee wordt de ProgressChanged gebeurtenis gegenereerd.

ReportProgress(Int32, Object)

Hiermee wordt de ProgressChanged gebeurtenis gegenereerd.

ReportProgress(Int32)

Hiermee wordt de ProgressChanged gebeurtenis gegenereerd.

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

Parameters

percentProgress
Int32

Het percentage, van 0 tot 100, van de achtergrondbewerking die is voltooid.

Uitzonderingen

De eigenschap WorkerReportsProgress is ingesteld op false.

Voorbeelden

In het volgende codevoorbeeld ziet u hoe de ReportProgress methode wordt gebruikt om de voortgang van een asynchrone bewerking aan de gebruiker te rapporteren. Dit codevoorbeeld maakt deel uit van een groter voorbeeld voor de BackgroundWorker klasse.

// 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
{
    result = n < 2
        ? 1
        : ComputeFibonacci(n - 1, worker, e) +
                 ComputeFibonacci(n - 2, worker, e);

    // Report progress as a percentage of the total task.
    int percentComplete =
        (int)(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

Opmerkingen

Als u de achtergrondbewerking nodig hebt om te rapporteren over de voortgang, kunt u de ReportProgress methode aanroepen om de ProgressChanged gebeurtenis te genereren. De waarde van de WorkerReportsProgress eigenschap moet zijn true, of ReportProgress zal een InvalidOperationException.

Het is aan u om een zinvolle manier te implementeren om de voortgang van uw achtergrondbewerking te meten als percentage van de voltooide totale taak.

De aanroep van de ReportProgress methode is asynchroon en retourneert onmiddellijk. De ProgressChanged gebeurtenis-handler wordt uitgevoerd op de thread die de BackgroundWorker.

Zie ook

Van toepassing op

ReportProgress(Int32, Object)

Hiermee wordt de ProgressChanged gebeurtenis gegenereerd.

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

Parameters

percentProgress
Int32

Het percentage, van 0 tot 100, van de achtergrondbewerking die is voltooid.

userState
Object

Een unieke Object aanduiding die de gebruikersstatus aangeeft. Geretourneerd als de UserState eigenschap van de ProgressChangedEventArgs.

Uitzonderingen

De eigenschap WorkerReportsProgress is ingesteld op false.

Voorbeelden

In het volgende codevoorbeeld ziet u hoe de ReportProgress methode wordt gebruikt om de voortgang van een asynchrone bewerking aan de gebruiker te rapporteren. Dit codevoorbeeld maakt deel uit van een groter voorbeeld voor de ToolStripProgressBar klasse.

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

Opmerkingen

Als u de achtergrondbewerking nodig hebt om te rapporteren over de voortgang, kunt u de ReportProgress methode aanroepen om de ProgressChanged gebeurtenis te genereren. De WorkerReportsProgress eigenschapswaarde moet true, of ReportProgress genereert een InvalidOperationException.

Het is aan u om een zinvolle manier te implementeren om de voortgang van uw achtergrondbewerking te meten als percentage van de voltooide totale taak.

Zie ook

Van toepassing op