BackgroundWorker.ReportProgress BackgroundWorker.ReportProgress BackgroundWorker.ReportProgress BackgroundWorker.ReportProgress Method

定義

ProgressChanged イベントを発生させます。Raises the ProgressChanged event.

オーバーロード

ReportProgress(Int32) ReportProgress(Int32) ReportProgress(Int32) ReportProgress(Int32)

ProgressChanged イベントを発生させます。Raises the ProgressChanged event.

ReportProgress(Int32, Object) ReportProgress(Int32, Object) ReportProgress(Int32, Object) ReportProgress(Int32, Object)

ProgressChanged イベントを発生させます。Raises the ProgressChanged event.

ReportProgress(Int32) ReportProgress(Int32) ReportProgress(Int32) ReportProgress(Int32)

ProgressChanged イベントを発生させます。Raises the ProgressChanged event.

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

パラメーター

percentProgress
Int32 Int32 Int32 Int32

完了しているバックグラウンド操作の比率 (0 ~ 100%)。The percentage, from 0 to 100, of the background operation that is complete.

例外

次のコード例は、 ReportProgressメソッドを使用して、非同期操作の進行状況をユーザーに報告する方法を示しています。The following code example demonstrates the use of the ReportProgress method to report the progress of an asynchronous operation to the user. このコード例は、 BackgroundWorkerクラスに対して提供される大規模な例の一部です。This code example is part of a larger example provided for the BackgroundWorker class.

// 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イベントを発生させることができます。If you need the background operation to report on its progress, you can call the ReportProgress method to raise the ProgressChanged event. プロパティ値はtrueであるReportProgressか、をスローする必要があります。InvalidOperationException WorkerReportsProgressThe WorkerReportsProgress property value must be true, or ReportProgress will throw an InvalidOperationException.

バックグラウンド操作の進行状況を、完了したタスクの合計に対する割合として測定する、適切な方法を実装する必要があります。It is up to you to implement a meaningful way of measuring your background operation's progress as a percentage of the total task completed.

メソッドのReportProgress呼び出しは非同期であり、すぐに制御を戻します。The call to the ReportProgress method is asynchronous and returns immediately. イベントProgressChangedハンドラーは、 BackgroundWorkerを作成したスレッドで実行されます。The ProgressChanged event handler executes on the thread that created the BackgroundWorker.

こちらもご覧ください

ReportProgress(Int32, Object) ReportProgress(Int32, Object) ReportProgress(Int32, Object) ReportProgress(Int32, Object)

ProgressChanged イベントを発生させます。Raises the ProgressChanged event.

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)

パラメーター

percentProgress
Int32 Int32 Int32 Int32

完了しているバックグラウンド操作の比率 (0 ~ 100%)。The percentage, from 0 to 100, of the background operation that is complete.

userState
Object Object Object Object

RunWorkerAsync(Object) に渡される状態オブジェクト。The state object passed to RunWorkerAsync(Object).

例外

次のコード例は、 ReportProgressメソッドを使用して、非同期操作の進行状況をユーザーに報告する方法を示しています。The following code example demonstrates the use of the ReportProgress method to report the progress of an asynchronous operation to the user. このコード例は、 ToolStripProgressBarクラスに対して提供される大規模な例の一部です。This code example is part of a larger example provided for the ToolStripProgressBar class.

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イベントを発生させることができます。If you need the background operation to report on its progress, you can call the ReportProgress method to raise the ProgressChanged event. プロパティ値はtrueであるかReportProgress 、をスローする必要があります。InvalidOperationException WorkerReportsProgressThe WorkerReportsProgress property value must true, or ReportProgress will throw an InvalidOperationException.

バックグラウンド操作の進行状況を、完了したタスクの合計に対する割合として測定する、適切な方法を実装する必要があります。It is up to you to implement a meaningful way of measuring your background operation's progress as a percentage of the total task completed.

こちらもご覧ください

適用対象