RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1441539
Accepted
Exspress
Exspress
Asked:2022-08-22 17:41:00 +0000 UTC2022-08-22 17:41:00 +0000 UTC 2022-08-22 17:41:00 +0000 UTC

C# 进度条控制台应用程序

  • 772

我会给你一个昂贵的代码,给那些不想花 9 块钱下载一个特殊库的人。

static void Progressbar() {
            var blackBlock = "█";
            var middleBlock = "▓";
            var ligthBlock = "▒";
            int blockCount = 100;
            
            int start = 11;

            Console.ForegroundColor = ConsoleColor.Cyan;
            var posY = Console.CursorTop;
            //var LOADING = " Loading: [{0}{1}{2}]";
           // Console.Write(LOADING);

            Console.BackgroundColor = ConsoleColor.Blue;
            string TEMPLATE = " Loading: [{0}{1}{2}] ";
            Console.SetCursorPosition(start, posY);
            for (int i = 0; i < 50; i++) {
                /* Thread.Sleep(100);
                 TimeSpan.FromSeconds(100);
                 Console.Write("{0}", new string(' ', ligthBlock.Length));
                 Console.SetCursorPosition(Console.CursorLeft - 1, posY);
                 Console.Write("{0}", new string(' ', middleBlock.Length));
                 Thread.Sleep(100);
                 Console.BackgroundColor = ConsoleColor.DarkBlue;
                 Console.SetCursorPosition(Console.CursorLeft - 1, posY);
                 Console.Write("{0}", new string(' ', blackBlock.Length));
                 */

                Thread.Sleep(200);
                TimeSpan.FromSeconds(200);
                Console.BackgroundColor = ConsoleColor.Gray;
                var output = string.Format(" Loading: [{0}{1}{2}] ",
                    new string(' ', ligthBlock.Length),
                    new string(' ', middleBlock.Length),
                    new string(' ', blackBlock.Length));
                Console.Write(output);
            }

            Console.BackgroundColor = ConsoleColor.White;
            Console.Write("] \n");
  }

升级版:

       static void Progressbar() {
            int blockCount = 100;
            int start = 11;
            var posY = Console.CursorTop;

                //               //012345678911
                string template = " Loading: [{0}{1}{2} ] {3}% {4}s";
                Console.WriteLine(template);
                int maxProgress = 50;
                ConsoleProgressBar bar = new ConsoleProgressBar(11, posY, maxProgress);
                long previous = -1;
                long total = 1000000000;
                for (long i = 0; i < total; i++) {
                    long progress = i * maxProgress / total;
                    if (progress != previous) {
                        bar.ShowProgress((int)progress);
                        previous = progress;
                    }
                }

            bar.ShowProgress(maxProgress);
            Console.BackgroundColor = ConsoleColor.White;
        }

    }


    public class ConsoleProgressBar {
        public int Left { get; set; }
        public int Top { get; set; }
        public int Length { get; set; }

        public ConsoleProgressBar(int left, int top, int length) {
            Left = left;
            Top = top;
            Length = length;
        }

        public void ShowProgress(int progress) {
            if (progress > Length || progress < 0)
                throw new ArgumentException($"Invalid progress value, must be between 0 and {Length} but actual {progress}.");

            int start = 0;

            (int left, int top) = Console.GetCursorPosition();
            Console.SetCursorPosition(Left, Top);
            Thread.Sleep(100);
            Console.Write($"{new string('█', progress)}" +
                $"{new string('▓', progress)}" +
                $"{new string('░', Length - progress)}" +
                $"{new string(Convert.ToChar(start++), Length - progress)}" +
$"{new string(Convert.ToChar(Timer.ActiveCount), Length - progress)}");
            Console.SetCursorPosition(left, top);
            Thread.Sleep(100);
        }
}

这是我得到的结果: C#进度条控制台App

为什么不显示],完成百分比,完成时间?并且要注意进度条的一半█还没有结束。在加载过程中括号之间,如果需要,您还可以腾出空闲空间,即ShowProgress指定第二个参数将检查括号之间的空白是否必要并被填充。

我究竟做错了什么?

c# консоль
  • 1 1 个回答
  • 54 Views

1 个回答

  • Voted
  1. Best Answer
    aepot
    2022-08-22T22:50:50Z2022-08-22T22:50:50Z

    你想要那样的东西吗?

    static class Program
    {
        static void Main(string[] args)
        {
            Progressbar();
            Console.ReadKey();
        }
    
        static void Progressbar()
        {
            Console.ForegroundColor = ConsoleColor.Cyan;
            var posY = Console.CursorTop;
            string template = " Loading: ";
            Console.WriteLine(template);
            ConsoleProgressBar bar = new ConsoleProgressBar(template.Length, posY, 50);
            long previous = -1;
            long total = 1000000000;
            for (long i = 0; i < total; i++)
            {
                long progress = i * 100 / total;
                if (progress != previous)
                {
                    bar.ShowProgress((int)progress);
                    previous = progress;
                }
            }
    
            bar.ShowProgress(100);
            Console.ResetColor();
        }
    }
    
    public class ConsoleProgressBar
    {
        public int Left { get; }
        public int Top { get; }
        public int Length { get; }
    
        public ConsoleProgressBar(int left, int top, int length)
        {
            Left = left;
            Top = top;
            Length = length;
        }
    
        public void ShowProgress(int progress)
        {
            if (progress > 100 || progress < 0)
                throw new ArgumentException($"Invalid progress value, must be between 0 and 100 but actual {progress}.");
            int p = progress * Length / 100;
            (int left, int top) = Console.GetCursorPosition();
            Console.SetCursorPosition(Left, Top);
            Console.Write($"[{new string('█', p / 2)}" +
                new string('▓', p / 2 + p % 2) +
                $"{new string('░', Length - p)}] {progress}%");
            Console.SetCursorPosition(left, top);
        }
    }
    

    以百分比更改任务进度。

    在此处输入图像描述

    • 0

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5