BackgroundWorker.ReportProgress Methode
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Hiermee wordt de ProgressChanged gebeurtenis gegenereerd.
Overloads
| Name | Description |
|---|---|
| ReportProgress(Int32) |
Hiermee wordt de ProgressChanged gebeurtenis gegenereerd. |
| ReportProgress(Int32, Object) |
Hiermee wordt de ProgressChanged gebeurtenis gegenereerd. |
ReportProgress(Int32)
Hiermee wordt de ProgressChanged gebeurtenis gegenereerd.
public:
void ReportProgress(int percentProgress);
public void ReportProgress(int percentProgress);
member this.ReportProgress : int -> unit
Public Sub ReportProgress (percentProgress As Integer)
Parameters
- percentProgress
- Int32
Het percentage, van 0 tot 100, van de achtergrondbewerking die is voltooid.
Uitzonderingen
De eigenschap WorkerReportsProgress is ingesteld op false.
Voorbeelden
In het volgende codevoorbeeld ziet u hoe de ReportProgress methode wordt gebruikt om de voortgang van een asynchrone bewerking aan de gebruiker te rapporteren. Dit codevoorbeeld maakt deel uit van een groter voorbeeld voor de BackgroundWorker klasse.
// 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
{
result = n < 2
? 1
: ComputeFibonacci(n - 1, worker, e) +
ComputeFibonacci(n - 2, worker, e);
// Report progress as a percentage of the total task.
int percentComplete =
(int)(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
Opmerkingen
Als u de achtergrondbewerking nodig hebt om te rapporteren over de voortgang, kunt u de ReportProgress methode aanroepen om de ProgressChanged gebeurtenis te genereren. De waarde van de WorkerReportsProgress eigenschap moet zijn true, of ReportProgress zal een InvalidOperationException.
Het is aan u om een zinvolle manier te implementeren om de voortgang van uw achtergrondbewerking te meten als percentage van de voltooide totale taak.
De aanroep van de ReportProgress methode is asynchroon en retourneert onmiddellijk. De ProgressChanged gebeurtenis-handler wordt uitgevoerd op de thread die de BackgroundWorker.
Zie ook
- Handleiding: Een bewerking uitvoeren op de achtergrond
- Procedure: Een bestand downloaden op de achtergrond
Van toepassing op
ReportProgress(Int32, Object)
Hiermee wordt de ProgressChanged gebeurtenis gegenereerd.
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)
Parameters
- percentProgress
- Int32
Het percentage, van 0 tot 100, van de achtergrondbewerking die is voltooid.
- userState
- Object
Een unieke Object aanduiding die de gebruikersstatus aangeeft. Geretourneerd als de UserState eigenschap van de ProgressChangedEventArgs.
Uitzonderingen
De eigenschap WorkerReportsProgress is ingesteld op false.
Voorbeelden
In het volgende codevoorbeeld ziet u hoe de ReportProgress methode wordt gebruikt om de voortgang van een asynchrone bewerking aan de gebruiker te rapporteren. Dit codevoorbeeld maakt deel uit van een groter voorbeeld voor de ToolStripProgressBar klasse.
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
Opmerkingen
Als u de achtergrondbewerking nodig hebt om te rapporteren over de voortgang, kunt u de ReportProgress methode aanroepen om de ProgressChanged gebeurtenis te genereren. De WorkerReportsProgress eigenschapswaarde moet true, of ReportProgress genereert een InvalidOperationException.
Het is aan u om een zinvolle manier te implementeren om de voortgang van uw achtergrondbewerking te meten als percentage van de voltooide totale taak.
Zie ook
- Handleiding: Een bewerking uitvoeren op de achtergrond
- Procedure: Een bestand downloaden op de achtergrond