BackgroundWorker.ReportProgress メソッド

定義

ProgressChanged イベントを発生させます。

オーバーロード

ReportProgress(Int32)

ProgressChanged イベントを発生させます。

ReportProgress(Int32, Object)

ProgressChanged イベントを発生させます。

ReportProgress(Int32)

ソース:
BackgroundWorker.cs
ソース:
BackgroundWorker.cs
ソース:
BackgroundWorker.cs

ProgressChanged イベントを発生させます。

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

パラメーター

percentProgress
Int32

完了しているバックグラウンド操作の比率 (0 ~ 100%)。

例外

WorkerReportsProgress プロパティが false に設定されています。

次のコード例では、 メソッドを ReportProgress 使用して、非同期操作の進行状況をユーザーに報告する方法を示します。 このコード例は、BackgroundWorker クラスのために提供されている大規模な例の一部です。

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

注釈

バックグラウンド操作で進行状況を報告する必要がある場合は、 メソッドを ReportProgress 呼び出してイベントを ProgressChanged 発生させることができます。 プロパティの値は WorkerReportsProgress である必要があります。 trueまたは ReportProgress 、 を InvalidOperationExceptionスローします。

完了したタスクの合計に対する割合としてバックグラウンド操作の進行状況を測定する意味のある方法を実装するのは、お客様次第です。

メソッドの ReportProgress 呼び出しは非同期であり、すぐにを返します。 イベント ハンドラーは ProgressChanged 、 を作成したスレッドで実行されます BackgroundWorker

こちらもご覧ください

適用対象

ReportProgress(Int32, Object)

ソース:
BackgroundWorker.cs
ソース:
BackgroundWorker.cs
ソース:
BackgroundWorker.cs

ProgressChanged イベントを発生させます。

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)

パラメーター

percentProgress
Int32

完了しているバックグラウンド操作の比率 (0 ~ 100%)。

userState
Object

ユーザー状態を示す一意の ObjectProgressChangedEventArgsUserState プロパティとして返されます。

例外

WorkerReportsProgress プロパティが false に設定されています。

次のコード例では、 メソッドを ReportProgress 使用して、非同期操作の進行状況をユーザーに報告する方法を示します。 このコード例は、ToolStripProgressBar クラスのために提供されている大規模な例の一部です。

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

注釈

バックグラウンド操作で進行状況を報告する必要がある場合は、 メソッドを ReportProgress 呼び出してイベントを ProgressChanged 発生させることができます。 プロパティの値はWorkerReportsProgress、 または ReportProgress である必要がありますtrueInvalidOperationException

完了したタスクの合計に対する割合としてバックグラウンド操作の進行状況を測定する意味のある方法を実装するのは、お客様次第です。

こちらもご覧ください

適用対象