BackgroundWorker.ReportProgress Metódus

Definíció

Az eseményt emeli ProgressChanged ki.

Túlterhelések

Name Description
ReportProgress(Int32)

Az eseményt emeli ProgressChanged ki.

ReportProgress(Int32, Object)

Az eseményt emeli ProgressChanged ki.

ReportProgress(Int32)

Az eseményt emeli ProgressChanged ki.

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

Paraméterek

percentProgress
Int32

A befejezett háttérművelet százalékos értéke 0 és 100 között.

Kivételek

A WorkerReportsProgress tulajdonság be van állítva false-re.

Példák

Az alábbi példakód azt mutatja be, hogy a ReportProgress metódus hogyan jelenti egy aszinkron művelet előrehaladását a felhasználónak. Ez a példakód egy nagyobb, az BackgroundWorker osztályhoz tartozó példa része.

// 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

Megjegyzések

Ha szüksége van a háttérműveletre a folyamat előrehaladásának jelentéséhez, meghívhatja a ReportProgress metódust az ProgressChanged esemény indításához. A WorkerReportsProgress tulajdonság értékének kell lennie true, vagy ReportProgress egy InvalidOperationException.

Önön múlik, hogyan mérheti a háttérművelet előrehaladását a teljes elvégzett tevékenység százalékos arányában.

A metódus hívása ReportProgress aszinkron, és azonnal visszatér. Az ProgressChanged eseménykezelő azon a szálon fut, amely létrehozta a BackgroundWorker.

Lásd még

A következőre érvényes:

ReportProgress(Int32, Object)

Az eseményt emeli ProgressChanged ki.

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)

Paraméterek

percentProgress
Int32

A befejezett háttérművelet százalékos értéke 0 és 100 között.

userState
Object

A felhasználó állapotát jelző egyedi Object érték. A visszaadott érték ProgressChangedEventArgsa UserState .

Kivételek

A WorkerReportsProgress tulajdonság be van állítva false-re.

Példák

Az alábbi példakód azt mutatja be, hogy a ReportProgress metódus hogyan jelenti egy aszinkron művelet előrehaladását a felhasználónak. Ez a példakód egy nagyobb, az ToolStripProgressBar osztályhoz tartozó példa része.

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

Megjegyzések

Ha szüksége van a háttérműveletre a folyamat előrehaladásának jelentéséhez, meghívhatja a ReportProgress metódust az ProgressChanged esemény indításához. A WorkerReportsProgress tulajdonságértéknek egy ReportProgresstrueInvalidOperationException.

Önön múlik, hogyan mérheti a háttérművelet előrehaladását a teljes elvégzett tevékenység százalékos arányában.

Lásd még

A következőre érvényes: