目录
介绍
我写了很多控制台应用程序,通常是生成源代码和其他文件的工具和实用程序。有时,这个生成器可能会花费一些时间,并且能够向用户报告进度会很好。
我已经看到了许多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]);
}
}
}
这是完整的代码,因此您甚至不必下载链接。只需复制即可。
如果您碰巧编写了控制台实用程序,希望对您有用。