BackgroundWorker.ReportProgress Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Genera l'evento ProgressChanged.
Overload
ReportProgress(Int32) |
Genera l'evento ProgressChanged. |
ReportProgress(Int32, Object) |
Genera l'evento ProgressChanged. |
ReportProgress(Int32)
- Origine:
- BackgroundWorker.cs
- Origine:
- BackgroundWorker.cs
- Origine:
- BackgroundWorker.cs
Genera l'evento ProgressChanged.
public:
void ReportProgress(int percentProgress);
public void ReportProgress (int percentProgress);
member this.ReportProgress : int -> unit
Public Sub ReportProgress (percentProgress As Integer)
Parametri
- percentProgress
- Int32
La percentuale di completamento, da 0 a 100, dell'operazione in background.
Eccezioni
La proprietà WorkerReportsProgress è impostata su false
.
Esempio
Nell'esempio di codice seguente viene illustrato l'uso del ReportProgress metodo per segnalare lo stato di avanzamento di un'operazione asincrona all'utente. Questo esempio di codice fa parte di un esempio più ampio fornito per la BackgroundWorker classe .
// 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
Commenti
Se è necessaria l'operazione in background per segnalarne lo stato di avanzamento, è possibile chiamare il ReportProgress metodo per generare l'evento ProgressChanged . Il valore della WorkerReportsProgress proprietà deve essere true
o ReportProgress genererà un'eccezione InvalidOperationException.
È compito dell'utente implementare un modo significativo per misurare lo stato di avanzamento dell'operazione in background come percentuale del totale dell'attività completata.
La chiamata al ReportProgress metodo è asincrona e restituisce immediatamente. Il ProgressChanged gestore eventi viene eseguito nel thread che ha creato l'oggetto BackgroundWorker.
Vedi anche
Si applica a
ReportProgress(Int32, Object)
- Origine:
- BackgroundWorker.cs
- Origine:
- BackgroundWorker.cs
- Origine:
- BackgroundWorker.cs
Genera l'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)
Parametri
- percentProgress
- Int32
La percentuale di completamento, da 0 a 100, dell'operazione in background.
- userState
- Object
Oggetto Object univoco che indica lo stato utente. Restituito come proprietà UserState di ProgressChangedEventArgs.
Eccezioni
La proprietà WorkerReportsProgress è impostata su false
.
Esempio
Nell'esempio di codice seguente viene illustrato l'uso del ReportProgress metodo per segnalare lo stato di avanzamento di un'operazione asincrona all'utente. Questo esempio di codice fa parte di un esempio più ampio fornito per la ToolStripProgressBar classe .
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
Commenti
Se è necessaria l'operazione in background per segnalarne lo stato di avanzamento, è possibile chiamare il ReportProgress metodo per generare l'evento ProgressChanged . Il valore della WorkerReportsProgress proprietà deve true
o ReportProgress genererà un'eccezione InvalidOperationException.
È compito dell'utente implementare un modo significativo per misurare lo stato di avanzamento dell'operazione in background come percentuale del totale dell'attività completata.