65.9K
CodeProject 正在变化。 阅读更多。
Home

C# 控制台进度条

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.95/5 (28投票s)

2020 年 1 月 6 日

MIT

1分钟阅读

viewsIcon

60879

downloadIcon

1099

轻松为你的控制台应用程序添加进度报告

ProgressDemo

引言

我编写了很多控制台应用程序,通常是生成源代码和其他文件的工具和实用程序。 有时,这种生成可能需要一些时间,并且能够向用户报告进度会很好。

我见过很多 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 日 - 初始提交
© . All rights reserved.