BackgroundWorker.ReportProgress 메서드

정의

ProgressChanged 이벤트를 발생시킵니다.Raises the ProgressChanged event.

오버로드

ReportProgress(Int32)

ProgressChanged 이벤트를 발생시킵니다.Raises the ProgressChanged event.

ReportProgress(Int32, Object)

ProgressChanged 이벤트를 발생시킵니다.Raises the ProgressChanged event.

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

0부터 100 완료 되는 백그라운드 작업의 백분율입니다.The percentage, from 0 to 100, of the background operation that is complete.

예외

WorkerReportsProgress 속성은 false로 설정됩니다.The WorkerReportsProgress property is set to false.

예제

다음 코드 예제에서는 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. WorkerReportsProgress 속성 값을 true해야 합니다. 그렇지 않으면 ReportProgress InvalidOperationException을 throw 합니다.The 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)

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

0부터 100 완료 되는 백그라운드 작업의 백분율입니다.The percentage, from 0 to 100, of the background operation that is complete.

userState
Object

사용자 상태를 나타내는 고유한 Object입니다.A unique Object indicating the user state. UserStateProgressChangedEventArgs 속성으로서 반환되었습니다.Returned as the UserState property of the ProgressChangedEventArgs.

예외

WorkerReportsProgress 속성은 false로 설정됩니다.The WorkerReportsProgress property is set to false.

예제

다음 코드 예제에서는 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. WorkerReportsProgress 속성 값을 true해야 합니다. 그렇지 않으면 ReportProgress InvalidOperationException을 throw 합니다.The 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.

추가 정보

적용 대상