难点在最后输出100%问题。
经过多次实践,终于找出解决:
/// <summary>
/// 以执行频率打印进度
/// </summary>
/// <param name="Max">最大值</param>
/// <param name="Y">执行频率</param>
public static void Do(Action work, double Max, double Y = 0.01)
{
int current = 0;
for (int i = 0; i < Max; i++)
{
//百分之一时反馈
if ((int)(current++ % (Max * Y)) == 0)
Console.WriteLine($"已经完成{current}个,进度{Math.Floor(current / (Max * 0.01))}%。");
//工作代码
work();
}
//补充100%的输出
if ((int)((current - 1) % (Max * Y)) != 0)
{
Console.WriteLine($"已经完成{current}个,进度{Math.Floor(current / (Max * 0.01))}%。");
}
}
public static void work()
{
//工作代码
Thread.Sleep(100);
}
执行代码:
//以执行频率打印进度
Class6.Do(Class6.work, 99, 0.3);
最后显示结果:
已经完成1个,进度1%。
已经完成31个,进度31%。
已经完成61个,进度61%。
已经完成91个,进度91%。
已经完成99个,进度100%
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。