在C#中,可以使用IProgress<T>
接口来实现进度报告。IProgress<T>
接口定义了一个用于报告进度的对象,它包含一个Report
方法,可以用来通知进度的改变。以下是一个示例代码:
using System;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
var progress = new Progress<int>(report =>
{
Console.WriteLine($"Progress: {report}%");
});
await Task.Run(() =>
{
for (int i = 0; i <= 100; i++)
{
// 模拟耗时操作
System.Threading.Thread.Sleep(100);
// 报告进度
((IProgress<int>)progress).Report(i);
}
});
}
}
在这段代码中,首先创建了一个Progress<int>
对象,用于报告int
类型的进度。然后在Task.Run
中执行一个耗时操作,并在循环中通过((IProgress<int>)progress).Report(i);
来报告进度。
运行以上代码,可以看到每隔100ms打印一次进度信息。
需要注意的是,IProgress<T>
是一个泛型接口,可以根据需要自定义报告进度的数据类型。