Zoeken…


Eenvoudige voortgangsrapportage

IProgress<T> kan worden gebruikt om de voortgang van een procedure aan een andere procedure te melden. Dit voorbeeld laat zien hoe u een basismethode kunt maken die de voortgang rapporteert.

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);
    }
}

Output:

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

Merk op dat wanneer u deze code uitvoert, u mogelijk ziet dat getallen buiten de orde worden uitgevoerd. Dit komt omdat de IProgress<T>.Report() asynchroon wordt uitgevoerd en daarom niet zo geschikt is voor situaties waarin de voortgang op volgorde moet worden gerapporteerd.

IProgress gebruiken

Het is belangrijk op te merken dat de klasse System.Progress<T> niet over de methode Report() beschikt. Deze methode is expliciet geïmplementeerd vanuit de IProgress<T> -interface en moet daarom worden aangeroepen op een Progress<T> wanneer deze wordt gecast naar een 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


Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow