BackgroundWorker.ReportProgress Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Löst das ProgressChanged-Ereignis aus.
Überlädt
ReportProgress(Int32) |
Löst das ProgressChanged-Ereignis aus. |
ReportProgress(Int32, Object) |
Löst das ProgressChanged-Ereignis aus. |
ReportProgress(Int32)
- Quelle:
- BackgroundWorker.cs
- Quelle:
- BackgroundWorker.cs
- Quelle:
- BackgroundWorker.cs
Löst das ProgressChanged-Ereignis aus.
public:
void ReportProgress(int percentProgress);
public void ReportProgress (int percentProgress);
member this.ReportProgress : int -> unit
Public Sub ReportProgress (percentProgress As Integer)
Parameter
- percentProgress
- Int32
Bereits abgeschlossener Teil des Hintergrundvorgangs in Prozent (1-100).
Ausnahmen
Die WorkerReportsProgress-Eigenschaft ist auf false
festgelegt.
Beispiele
Im folgenden Codebeispiel wird die Verwendung der ReportProgress -Methode veranschaulicht, um dem Benutzer den Fortschritt eines asynchronen Vorgangs zu melden. Dieses Codebeispiel ist Teil eines größeren Beispiels, das für die BackgroundWorker-Klasse bereitgestellt wird.
// 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
Hinweise
Wenn Sie den Hintergrundvorgang benötigen, um den Fortschritt zu melden, können Sie die ReportProgress -Methode aufrufen, um das Ereignis auszulösen ProgressChanged . Der WorkerReportsProgress Eigenschaftswert muss true
sein oder ReportProgress löst einen aus InvalidOperationException.
Es liegt an Ihnen, eine sinnvolle Methode zur Messung des Fortschritts Ihres Hintergrundvorgangs als Prozentsatz der gesamt abgeschlossenen Aufgabe zu implementieren.
Der Aufruf der ReportProgress -Methode ist asynchron und gibt sofort zurück. Der ProgressChanged Ereignishandler wird für den Thread ausgeführt, der den BackgroundWorkererstellt hat.
Weitere Informationen
- How to: Ausführen eines Vorgangs im Hintergrund
- Vorgehensweise: Downloaden einer Datei im Hintergrund
Gilt für:
ReportProgress(Int32, Object)
- Quelle:
- BackgroundWorker.cs
- Quelle:
- BackgroundWorker.cs
- Quelle:
- BackgroundWorker.cs
Löst das ProgressChanged-Ereignis aus.
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)
Parameter
- percentProgress
- Int32
Bereits abgeschlossener Teil des Hintergrundvorgangs in Prozent (1-100).
- userState
- Object
Ein eindeutiges Object, das den Benutzerzustand angibt. Wird als UserState-Eigenschaft von ProgressChangedEventArgszurückgegeben.
Ausnahmen
Die WorkerReportsProgress-Eigenschaft ist auf false
festgelegt.
Beispiele
Im folgenden Codebeispiel wird die Verwendung der ReportProgress -Methode veranschaulicht, um dem Benutzer den Fortschritt eines asynchronen Vorgangs zu melden. Dieses Codebeispiel ist Teil eines größeren Beispiels, das für die ToolStripProgressBar-Klasse bereitgestellt wird.
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
Hinweise
Wenn Sie den Hintergrundvorgang benötigen, um den Fortschritt zu melden, können Sie die ReportProgress -Methode aufrufen, um das Ereignis auszulösen ProgressChanged . Der WorkerReportsProgress Eigenschaftswert muss true
oder ReportProgress löst einen aus InvalidOperationException.
Es liegt an Ihnen, eine sinnvolle Methode zur Messung des Fortschritts Ihres Hintergrundvorgangs als Prozentsatz der gesamt abgeschlossenen Aufgabe zu implementieren.
Weitere Informationen
- How to: Ausführen eines Vorgangs im Hintergrund
- Vorgehensweise: Downloaden einer Datei im Hintergrund