Buscar..


Informe de progreso simple

IProgress<T> se puede usar para informar el progreso de algún procedimiento a otro procedimiento. Este ejemplo muestra cómo puede crear un método básico que informe de su progreso.

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

Salida:

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

Tenga en cuenta que cuando ejecute este código, es posible que los números salgan desordenados. Esto se debe a que el IProgress<T>.Report() se ejecuta de forma asíncrona y, por lo tanto, no es tan adecuado para situaciones en las que el progreso debe informarse en orden.

Utilizando IProgress

Es importante tener en cuenta que la System.Progress<T> no tiene el método Report() disponible. Este método se implementó explícitamente desde la IProgress<T> y, por lo tanto, debe llamarse en un Progress<T> cuando se IProgress<T> un 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
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow