BackgroundWorker.ReportProgress Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Genera el evento ProgressChanged.
Sobrecargas
ReportProgress(Int32) |
Genera el evento ProgressChanged. |
ReportProgress(Int32, Object) |
Genera el evento ProgressChanged. |
ReportProgress(Int32)
- Source:
- BackgroundWorker.cs
- Source:
- BackgroundWorker.cs
- Source:
- BackgroundWorker.cs
Genera el evento ProgressChanged.
public:
void ReportProgress(int percentProgress);
public void ReportProgress (int percentProgress);
member this.ReportProgress : int -> unit
Public Sub ReportProgress (percentProgress As Integer)
Parámetros
- percentProgress
- Int32
Porcentaje, de 0 a 100, de la operación en segundo plano que se ha completado.
Excepciones
La propiedad WorkerReportsProgress está establecida en false
.
Ejemplos
En el ejemplo de código siguiente se muestra el uso del ReportProgress método para notificar el progreso de una operación asincrónica al usuario. Este ejemplo de código es parte de un ejemplo más grande proporcionado para la clase 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
Comentarios
Si necesita la operación en segundo plano para informar sobre su progreso, puede llamar al ReportProgress método para generar el ProgressChanged evento. El WorkerReportsProgress valor de la propiedad debe ser true
, o ReportProgress producirá una InvalidOperationExceptionexcepción .
Es necesario implementar una manera significativa de medir el progreso de la operación en segundo plano como un porcentaje de la tarea total completada.
La llamada al ReportProgress método es asincrónica y devuelve inmediatamente. El ProgressChanged controlador de eventos se ejecuta en el subproceso que creó .BackgroundWorker
Consulte también
- Cómo: Ejecutar una operación en segundo plano
- Procedimiento para descargar un archivo en segundo plano
Se aplica a
ReportProgress(Int32, Object)
- Source:
- BackgroundWorker.cs
- Source:
- BackgroundWorker.cs
- Source:
- BackgroundWorker.cs
Genera el evento 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)
Parámetros
- percentProgress
- Int32
Porcentaje, de 0 a 100, de la operación en segundo plano que se ha completado.
- userState
- Object
Objeto Object único que indica el estado del usuario. Se devuelve como la propiedad UserState de ProgressChangedEventArgs.
Excepciones
La propiedad WorkerReportsProgress está establecida en false
.
Ejemplos
En el ejemplo de código siguiente se muestra el uso del ReportProgress método para notificar el progreso de una operación asincrónica al usuario. Este ejemplo de código es parte de un ejemplo más grande proporcionado para la clase 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
Comentarios
Si necesita la operación en segundo plano para informar sobre su progreso, puede llamar al ReportProgress método para generar el ProgressChanged evento. El WorkerReportsProgress valor de la propiedad debe true
, o ReportProgress producirá una InvalidOperationExceptionexcepción .
Es necesario implementar una manera significativa de medir el progreso de la operación en segundo plano como un porcentaje de la tarea total completada.
Consulte también
- Cómo: Ejecutar una operación en segundo plano
- Procedimiento para descargar un archivo en segundo plano