Recherche…


Rapport de progression simple

IProgress<T> peut être utilisé pour signaler la progression de certaines procédures à une autre procédure. Cet exemple montre comment créer une méthode de base indiquant ses progrès.

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

Sortie:

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

Notez que lorsque vous exécutez ce code, vous pouvez voir des numéros être sortis dans le désordre. En effet, la IProgress<T>.Report() est exécutée de manière asynchrone et ne convient donc pas aux situations dans lesquelles la progression doit être signalée dans l’ordre.

Utiliser IProgress

Il est important de noter que la System.Progress<T> ne dispose pas de la méthode Report() . Cette méthode a été implémentée explicitement à partir de l’ IProgress<T> et doit donc être appelée sur un Progress<T> lorsqu’elle est IProgress<T> en 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
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow