ShellProgressBar控制台中漂亮的显示进度条
ShellProgressBar控制台中漂亮的显示进度条
ShellProgressBar库的使用
控制台程序有时也需要进度条来显示任务执行的详细进度,最近就发现了一个第三方的类库叫ShellProgressBar,这个类库可以在控制台程序中完美的显示进度条。ShellProgressBar是一个非常棒的库,使用它,你可以在控制台输出一些非常惊艳的进度条。而且,ShellProgressBar是可以实现进度条的嵌套使用。而且也已经开始支持.net core。
1.visualize (concurrent) progress in your console application
2.This is a great little library to visualize long running command line tasks.
3.NET Core ready!
4.It also supports spawning child progress bars which allows you to visualize dependencies and concurrency rather nicely.
1. ShellProgressBar库安装
也是用NuGet来安装 : http://www.nuget.org/packages/ShellProgressBar/
使用时引用:using ShellProgressBar;的命名空间
2. ShellProgressBar的使用
我们先来建一个模拟调用进度的方法,来执行进度。
// 请求退出执行
public static bool RequestToQuit { get; set; }
// 标记完成方法
public static void TickToCompletion(IProgressBar pbar, int ticks, int sleep = 1750, Action<int> childAction = null)
{
var initialMessage = pbar.Message;
for (var i = 0; i < ticks && !RequestToQuit; i++)
{
pbar.Message = $"Start {i + 1} of {ticks} {Console.CursorTop}/{Console.WindowHeight}: {initialMessage}";
childAction?.Invoke(i);
Thread.Sleep(sleep);
pbar.Tick($"End {i + 1} of {ticks} {Console.CursorTop}/{Console.WindowHeight}: {initialMessage}");
}
}
然后配置进度条配置参数,执行走进度。
const int totalTicks = 10;
var options = new ProgressBarOptions
{
ProgressCharacter = '─',
ProgressBarOnBottom = true
};
using (var pbar = new ProgressBar(totalTicks, "progress bar is on the bottom now", options))
{
TickToCompletion(pbar, totalTicks, sleep: 500);
}
- 执行效果截图

3. 配置进度条的样式
除了常规的进度条,还可以配置进度条的样式。
const int totalTicks = 10;
var options = new ProgressBarOptions
{
// 设置前景色
ForegroundColor = ConsoleColor.Yellow,
// 设置完成时的前景色
ForegroundColorDone = ConsoleColor.DarkGreen,
// 设置背景色
BackgroundColor = ConsoleColor.DarkGray,
// 设置背景字符
BackgroundCharacter = '\u2593'
};
using (var pbar = new ProgressBar(totalTicks, "showing off styling", options))
{
TickToCompletion(pbar, totalTicks, sleep: 500);
}
- 执行效果截图

4. 设置非实时刷新进度
默认进度条的刷新时间是500ms,我们可以设置不让它实时刷新。
const int totalTicks = 5;
var options = new ProgressBarOptions
{
// 关闭实时显示时间
DisplayTimeInRealTime = false
};
using (var pbar = new ProgressBar(totalTicks, "only draw progress on tick", options))
{
TickToCompletion(pbar, totalTicks, sleep: 1750);
}
- 执行效果截图

5. 嵌套子进度条
我们还可以嵌套子进度条,进度条下都可以嵌套属于自己的子进度条。
const int totalTicks = 10;
// 主进度条配置
var options = new ProgressBarOptions
{
ForegroundColor = ConsoleColor.Yellow,
BackgroundColor = ConsoleColor.DarkYellow,
ProgressCharacter = '─'
};
// 子进度条配置
var childOptions = new ProgressBarOptions
{
ForegroundColor = ConsoleColor.Green,
BackgroundColor = ConsoleColor.DarkGreen,
ProgressCharacter = '─',
// 当完成时保存子进度条状态
CollapseWhenFinished = false
};
// 执行嵌套进度
using (var pbar = new ProgressBar(totalTicks, "main progressbar", options))
{
TickToCompletion(pbar, totalTicks, sleep: 10, childAction: (x) =>
{
using (var child = pbar.Spawn(totalTicks, "child actions", childOptions))
{
TickToCompletion(child, totalTicks, sleep: 100);
}
});
}
- 执行效果截图

6. 项目地址链接
shellprogressbar https://github.com/Mpdreamz/shellprogressbar
推荐阅读
- C#实现控制台显示动态进度条
- C#在PC上面控制安卓设备,太牛掰了
- 生成条形码二维码DataMatrix条码.EAN码.39码.交叉25码.UPC码.128码.93码.ISBN码.Codabar等
- C#生成二维码的两种快捷方式
资料参考
欢迎关注我的公众号“Net分享”,技术文章第一时间推送 , 分享一些你可能注意不到的细节。

ShellProgressBar控制台中漂亮的显示进度条的更多相关文章
- Asp.Net实现无刷新文件上传并显示进度条(非服务器控件实现)(转)
Asp.Net实现无刷新文件上传并显示进度条(非服务器控件实现) 相信通过Asp.Net的服务器控件上传文件在简单不过了,通过AjaxToolkit控件实现上传进度也不是什么难事,为什么还要自己辛辛苦 ...
- easyui datagrid显示进度条控制操作
在当我们需要控制时间前台实际项目页面datagrid显示进度条的数据加载时运行,和datagrid默认情况下只在有url加载运行时的数据显示方式的进度条.下面的代码手动控制: 打开一个进度条: $(' ...
- C#调用耗时函数时显示进度条浅探
最近在做一个VSS日志分析工具,使用C#进行开发,在完成了所有功能后,发现,从服务器下载VSS日志非常耗时,因为此,导致工具使用体验不好,所以,准备增加一个进度条.鉴于C#不经常使用,一下子搞个进度条 ...
- 基于Jquery插件Uploadify实现实时显示进度条上传图片
网址:http://www.jb51.net/article/83811.htm 这篇文章主要介绍了基于Jquery插件Uploadify实现实时显示进度条上传图片的相关资料,感兴趣的小伙伴们 ...
- 上传媒体文件--添加显示进度条 layui的upload控件
上传媒体文件--添加显示进度条 layui的upload控件 详细上传功能请参考博客:上传文件--媒体文件+获取上传文件的属性信息 layui的upload控件 - じ逐梦 - 博客园 (cnbl ...
- 任务栏显示进度条 CreateComObject(CLSID_TaskbarList) as ITaskbarList4
http://www.cnblogs.com/jxsoft/archive/2011/06/02/2067712.html //在任务栏显示 进度条 unit Unit9; interface use ...
- WPF下载远程文件,并显示进度条和百分比
WPF下载远程文件,并显示进度条和百分比 1.xaml <ProgressBar HorizontalAlignment="Left" Height="10&quo ...
- (委托事件处理)关于多线程执行显示进度条的实例(转)&&线程间操作无效: 从不是创建控件“rtxtEntryNO”的线程访问它。
关于多线程执行显示进度条的实例! 之前回答了一篇关于怎么在线程中操作进度条的帖子,估计有人看的不是很明白今天没事,写了一个小小的实例,很简单,就2个文件权当抛砖引玉,希望有更好解决方案的人发表一下意见 ...
- android标题栏(titlebar)显示进度条
在后台线程中执行各种操作(网络连接.大数据存储)的时候,我们希望让客户能看到后台有操作在进行,那么既能有效的提示用户,又不占用当前操作空间,最好的方法就是在标题栏有个进度条. [代码] [Java]代 ...
- ProgressIndicator显示进度条以及一些文字信息
//ProgressIndicator可以显示进度条以及一些文字信息,不过这个属性一般都在cs文件中操作. private void PhoneApplicationPage_Loaded(objec ...
随机推荐
- CSS – Font Family
前言 font-family 虽然只是一个 CSS 属性, 但是牵连许多东西, 所以独立一篇来讲. 网站一般上会使用 Google Fonts 作为 font-family, 下面会以一个 Googl ...
- Figma 学习笔记 – Scroll and Position Fixed
Scroll Scroll 属于 prototype 的一部分. 当一个 Frame 的内容超出 Frame 的高度或宽度时, Frame 就具备了 scroll 的能力. 通过 uncheck cl ...
- 深入理解 Nuxt.js 中的 app:created 钩子
title: 深入理解 Nuxt 中的 app created 钩子 date: 2024/9/26 updated: 2024/9/26 author: cmdragon excerpt: 摘要:本 ...
- @Primary ,@Qualifier ,@Autowired ,@Resource作用与区别
首先阐述 @Autowired 和 @Resource 的区别 @Resource 是JDK自带的注解 可以按名称注入也可以按类型注入,默认是按名称注入,没有显式指定名称时,在spring容器中匹配与 ...
- C++指针等于地址加偏移量
概述 本文通过c++示例代码演示指针的加减法运算及对 "指针 = 地址 + 偏移量" 的理解. 研究示例 1. 首先来检查各种变量类型所占的内存大小 #include <io ...
- excel江湖异闻录--修迪斯.嗦狸
因为技术出类拔萃,同学都尊称他为"修神",修神的python.vba.Javascript.java.数据库.批处理等众多编程语言都是极强的,以笔者的见识来判断,大佬的vba已经是 ...
- Java日期时间API系列22-----Jdk8中java.time包中的新的日期时间API类,Month月份和DayOfWeek星期的计算。
Java8中为月份和星期新增的了,Month和DayOfWeek,来处理月份和星期的特殊问题,这2个类都是枚举类,对Month.DayOfWeek源码说明和简单应用,月份英文,月份英文简称,月份中文, ...
- 强化学习笔记之【SAC算法】
强化学习笔记之[SAC算法] 前言: 本文为强化学习笔记第四篇,第一篇讲的是Q-learning和DQN,第二篇DDPG,第三篇TD3 TD3比DDPG少了一个target_actor网络,其它地方有 ...
- 你在使用 KubeSphere 吗?
如果你正在使用 KubeSphere,欢迎在社区分享你的使用和实践经验,赢取 KubeSphere 周边礼品(T恤.帆布袋.徽章等)以及 Kubernetes 技术书籍. 为什么我们要征集用户案例? ...
- 云原生爱好者周刊:非容器化应用也需要 Docker Compose
开源项目推荐 Process Compose Process Compose 是一个调度编排工具,不过不是用来调度容器的,而是用来调度非容器化的应用,可以定义进程的依赖性和启动顺序,也可以定义重启策略 ...