.NET Framework
Fortschritt verwenden und IProgress
Suche…
Einfache Fortschrittsberichterstattung
IProgress<T>
kann verwendet werden, um den Fortschritt eines Verfahrens an ein anderes Verfahren zu melden. Dieses Beispiel zeigt, wie Sie eine grundlegende Methode erstellen, die den Fortschritt anzeigt.
void Main()
{
IProgress<int> p = new Progress<int>(progress =>
{
Console.WriteLine("Running Step: {0}", progress);
});
LongJob(p);
}
public void LongJob(IProgress<int> progress)
{
var max = 10;
for (int i = 0; i < max; i++)
{
progress.Report(i);
}
}
Ausgabe:
Running Step: 0
Running Step: 3
Running Step: 4
Running Step: 5
Running Step: 6
Running Step: 7
Running Step: 8
Running Step: 9
Running Step: 2
Running Step: 1
Wenn Sie diesen Code ausführen, werden möglicherweise Zahlen außerhalb der Reihenfolge ausgegeben. Dies liegt daran, dass die IProgress<T>.Report()
-Methode asynchron ausgeführt wird und daher nicht für Situationen geeignet ist, in denen der Fortschritt in Reihenfolge gemeldet werden muss.
Verwendung von IProgress
Beachten Sie, dass für die Klasse System.Progress<T>
nicht die Methode Report()
verfügbar ist. Diese Methode wurde explizit von der IProgress<T>
-Schnittstelle implementiert und muss daher für einen Progress<T>
aufgerufen werden, wenn sie in einen IProgress<T>
.
var p1 = new Progress<int>();
p1.Report(1); //compiler error, Progress does not contain method 'Report'
IProgress<int> p2 = new Progress<int>();
p2.Report(2); //works
var p3 = new Progress<int>();
((IProgress<int>)p3).Report(3); //works