BackgroundWorker.ReportProgress Metod
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Genererar händelsen ProgressChanged .
Överlagringar
| Name | Description |
|---|---|
| ReportProgress(Int32) |
Genererar händelsen ProgressChanged . |
| ReportProgress(Int32, Object) |
Genererar händelsen ProgressChanged . |
ReportProgress(Int32)
- Källa:
- BackgroundWorker.cs
- Källa:
- BackgroundWorker.cs
- Källa:
- BackgroundWorker.cs
- Källa:
- BackgroundWorker.cs
- Källa:
- BackgroundWorker.cs
Genererar händelsen ProgressChanged .
public:
void ReportProgress(int percentProgress);
public void ReportProgress(int percentProgress);
member this.ReportProgress : int -> unit
Public Sub ReportProgress (percentProgress As Integer)
Parametrar
- percentProgress
- Int32
Procentandelen, från 0 till 100, av bakgrundsåtgärden som är klar.
Undantag
Egenskapen WorkerReportsProgress är inställd på false.
Exempel
I följande kodexempel visas hur metoden används ReportProgress för att rapportera förloppet för en asynkron åtgärd till användaren. Det här kodexemplet är en del av ett större exempel för BackgroundWorker klassen.
// 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
Kommentarer
Om du behöver bakgrundsåtgärden för att rapportera om dess förlopp kan du anropa ReportProgress metoden för att skapa ProgressChanged händelsen. Egenskapsvärdet WorkerReportsProgress måste vara true, eller ReportProgress kommer att utlösa en InvalidOperationException.
Det är upp till dig att implementera ett meningsfullt sätt att mäta bakgrundsåtgärdens förlopp som en procentandel av den totala slutförda aktiviteten.
Anropet ReportProgress till metoden är asynkront och returnerar omedelbart. Händelsehanteraren ProgressChanged körs på tråden som skapade BackgroundWorker.
Se även
Gäller för
ReportProgress(Int32, Object)
- Källa:
- BackgroundWorker.cs
- Källa:
- BackgroundWorker.cs
- Källa:
- BackgroundWorker.cs
- Källa:
- BackgroundWorker.cs
- Källa:
- BackgroundWorker.cs
Genererar händelsen 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)
Parametrar
- percentProgress
- Int32
Procentandelen, från 0 till 100, av bakgrundsåtgärden som är klar.
- userState
- Object
Ett unikt Object som anger användartillståndet. Returneras som UserState egenskapen för ProgressChangedEventArgs.
Undantag
Egenskapen WorkerReportsProgress är inställd på false.
Exempel
I följande kodexempel visas hur metoden används ReportProgress för att rapportera förloppet för en asynkron åtgärd till användaren. Det här kodexemplet är en del av ett större exempel för ToolStripProgressBar klassen.
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
Kommentarer
Om du behöver bakgrundsåtgärden för att rapportera om dess förlopp kan du anropa ReportProgress metoden för att skapa ProgressChanged händelsen. Egenskapsvärdet WorkerReportsProgress måste true, eller ReportProgress kommer att utlösa en InvalidOperationException.
Det är upp till dig att implementera ett meningsfullt sätt att mäta bakgrundsåtgärdens förlopp som en procentandel av den totala slutförda aktiviteten.