BackgroundWorker.ReportProgress Yöntem
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Olayı tetikler ProgressChanged .
Aşırı Yüklemeler
ReportProgress(Int32) |
Olayı tetikler ProgressChanged . |
ReportProgress(Int32, Object) |
Olayı tetikler ProgressChanged . |
ReportProgress(Int32)
- Kaynak:
- BackgroundWorker.cs
- Kaynak:
- BackgroundWorker.cs
- Kaynak:
- BackgroundWorker.cs
Olayı tetikler ProgressChanged .
public:
void ReportProgress(int percentProgress);
public void ReportProgress (int percentProgress);
member this.ReportProgress : int -> unit
Public Sub ReportProgress (percentProgress As Integer)
Parametreler
- percentProgress
- Int32
Tamamlanan arka plan işleminin 0 ile 100 yüzdesi.
Özel durumlar
WorkerReportsProgress özelliği false
olarak ayarlanmıştır.
Örnekler
Aşağıdaki kod örneği, kullanıcıya zaman uyumsuz bir işlemin ilerleme durumunu raporlamak için yönteminin kullanımını ReportProgress gösterir. Bu kod örneği, sınıfı için BackgroundWorker sağlanan daha büyük bir örneğin parçasıdır.
// 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
Açıklamalar
İlerleme durumunu raporlamak için arka plan işlemine ihtiyacınız varsa, olayı tetikmek ProgressChanged için yöntemini çağırabilirsinizReportProgress. Özellik WorkerReportsProgress değeri olmalıdır true
veya ReportProgress bir InvalidOperationExceptionoluşturur.
Tamamlanan toplam görevin yüzdesi olarak arka plan işleminizin ilerleme durumunu ölçmenin anlamlı bir yolunu uygulamak size bağlıdır.
yöntemine yapılan ReportProgress çağrı zaman uyumsuzdur ve hemen döndürür. Olay işleyicisi ProgressChanged , öğesini oluşturan BackgroundWorkeriş parçacığında yürütülür.
Ayrıca bkz.
Şunlara uygulanır
ReportProgress(Int32, Object)
- Kaynak:
- BackgroundWorker.cs
- Kaynak:
- BackgroundWorker.cs
- Kaynak:
- BackgroundWorker.cs
Olayı tetikler 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)
Parametreler
- percentProgress
- Int32
Tamamlanan arka plan işleminin 0 ile 100 yüzdesi.
- userState
- Object
Kullanıcı durumunu gösteren benzersiz Object bir. özelliği olarak UserState döndürülür ProgressChangedEventArgs.
Özel durumlar
WorkerReportsProgress özelliği false
olarak ayarlanmıştır.
Örnekler
Aşağıdaki kod örneği, kullanıcıya zaman uyumsuz bir işlemin ilerleme durumunu raporlamak için yönteminin kullanımını ReportProgress gösterir. Bu kod örneği, sınıfı için ToolStripProgressBar sağlanan daha büyük bir örneğin parçasıdır.
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
Açıklamalar
İlerleme durumunu raporlamak için arka plan işlemine ihtiyacınız varsa, olayı tetikmek ProgressChanged için yöntemini çağırabilirsinizReportProgress. Özellik değerinin WorkerReportsProgress olması gerekir true
veya ReportProgress bir InvalidOperationExceptionoluşturur.
Tamamlanan toplam görevin yüzdesi olarak arka plan işleminizin ilerleme durumunu ölçmenin anlamlı bir yolunu uygulamak size bağlıdır.