C#中的控制台进度条

目录

介绍

使用此混乱

编码此混乱


介绍

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

我已经看到了许多WinformsWPF的进度条,但对于控制台却看不到任何进度条,但这确实使我印象深刻。

使用此混乱

您可以调用ConsoleUtility.WriteProgressBar()以报告要完成的工作量,或者调用ConsoleUtility.WriteProgress()报告进度以未知的工作量。无论如何,第一个参数是进度。对于开放式进度(WriteProgress()),第一个参数只是一个整数值,每次都会递增。对于进度条,它是介于0100之间(包括0100)的数字。第二个参数在第一次调用该方法时应为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]);
        }
    }
}

这是完整的代码,因此您甚至不必下载链接。只需复制即可。

如果您碰巧编写了控制台实用程序,希望对您有用。

发布了70 篇原创文章 · 获赞 130 · 访问量 42万+

猜你喜欢

转载自blog.csdn.net/mzl87/article/details/104044723