BackgroundWorker.ReportProgress Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
ProgressChanged Vyvolá událost.
Přetížení
ReportProgress(Int32) |
ProgressChanged Vyvolá událost. |
ReportProgress(Int32, Object) |
ProgressChanged Vyvolá událost. |
ReportProgress(Int32)
- Zdroj:
- BackgroundWorker.cs
- Zdroj:
- BackgroundWorker.cs
- Zdroj:
- BackgroundWorker.cs
ProgressChanged Vyvolá událost.
public:
void ReportProgress(int percentProgress);
public void ReportProgress (int percentProgress);
member this.ReportProgress : int -> unit
Public Sub ReportProgress (percentProgress As Integer)
Parametry
- percentProgress
- Int32
Procento dokončené operace na pozadí od 0 do 100
Výjimky
Vlastnost WorkerReportsProgress je nastavena na hodnotu false
.
Příklady
Následující příklad kódu ukazuje použití ReportProgress metody k hlášení průběhu asynchronní operace uživateli. Tento příklad kódu je součástí většího příkladu BackgroundWorker pro třídu.
// 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
Poznámky
Pokud potřebujete, aby operace na pozadí hlásila její průběh, můžete volat metodu ReportProgress pro vyvolání ProgressChanged události. Hodnota WorkerReportsProgress vlastnosti musí být true
, nebo ReportProgress vyvolá InvalidOperationException.
Je na vás, abyste implementovali smysluplný způsob měření průběhu operace na pozadí jako procento z celkového dokončeného úkolu.
Volání ReportProgress metody je asynchronní a vrátí okamžitě. Obslužná rutina ProgressChanged události se spustí ve vlákně, které vytvořilo BackgroundWorkerobjekt .
Viz také
Platí pro
ReportProgress(Int32, Object)
- Zdroj:
- BackgroundWorker.cs
- Zdroj:
- BackgroundWorker.cs
- Zdroj:
- BackgroundWorker.cs
ProgressChanged Vyvolá událost.
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)
Parametry
- percentProgress
- Int32
Procento dokončené operace na pozadí od 0 do 100
- userState
- Object
Jedinečný údaj Object označující stav uživatele. Vráceno UserState jako vlastnost objektu ProgressChangedEventArgs.
Výjimky
Vlastnost WorkerReportsProgress je nastavena na hodnotu false
.
Příklady
Následující příklad kódu ukazuje použití ReportProgress metody k hlášení průběhu asynchronní operace uživateli. Tento příklad kódu je součástí většího příkladu ToolStripProgressBar pro třídu.
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
Poznámky
Pokud potřebujete, aby operace na pozadí hlásila její průběh, můžete volat metodu ReportProgress pro vyvolání ProgressChanged události. Hodnota WorkerReportsProgress vlastnosti musí true
, nebo ReportProgress vyvolá InvalidOperationException.
Je na vás, abyste implementovali smysluplný způsob měření průběhu operace na pozadí jako procento z celkového dokončeného úkolu.