.NET Framework
Usando el progreso e IProgress
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