C# 控制台进度条






4.95/5 (28投票s)
轻松为你的控制台应用程序添加进度报告
引言
我编写了很多控制台应用程序,通常是生成源代码和其他文件的工具和实用程序。 有时,这种生成可能需要一些时间,并且能够向用户报告进度会很好。
我见过很多 Winforms 和 WPF 的进度条,但控制台的却不多,但它似乎对我来说非常有用。
使用这个烂摊子
你可以调用 ConsoleUtility.WriteProgressBar()
来报告已知工作量的工作进度,或者调用 ConsoleUtility.WriteProgress()
来报告未知工作量的工作进度。 无论哪种情况,第一个参数都是进度。 对于开放式进度 (WriteProgress()
),第一个参数只是每次递增的整数值。 对于进度条,它是一个介于 0 和 100 之间的数字(包括 0 和 100)。 第二个参数应该在第一次调用该方法时为 false
,在后续调用时为 true
。 此演示代码应该演示
ConsoleUtility.WriteProgressBar(0);
for (var i = 0; i <= 100; ++i)
{
ConsoleUtility.WriteProgressBar(i,true);
Thread.Sleep(50);
}
Console.WriteLine();
ConsoleUtility.WriteProgress(0);
for (var i = 0; i <= 100; ++i)
{
ConsoleUtility.WriteProgress(i, true);
Thread.Sleep(50);
}
编写这个混乱的程序
代码简洁明了。 唯一不直观的部分是使用退格键覆盖我们之前的进度,以及我们用来用前导空格填充百分比的格式字符串。
using System;
namespace CU
{
static class ConsoleUtility
{
const char _block = '■';
const string _back = "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b";
const string _twirl = "-\\|/";
public static void WriteProgressBar(int percent, bool update = false)
{
if(update)
Console.Write(_back);
Console.Write("[");
var p = (int)((percent / 10f)+.5f);
for (var i = 0;i<10;++i)
{
if (i >= p)
Console.Write(' ');
else
Console.Write(_block);
}
Console.Write("] {0,3:##0}%", percent);
}
public static void WriteProgress(int progress, bool update = false)
{
if (update)
Console.Write("\b");
Console.Write(_twirl[progress % _twirl.Length]);
}
}
}
这是完整的代码,所以你甚至不需要下载链接。 如果你喜欢,只需复制即可。
如果你碰巧编写控制台实用程序,希望对你有所帮助。
历史
- 2020 年 1 月 6 日 - 初始提交