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


推荐阅读

资料参考

欢迎关注我的公众号“Net分享”,技术文章第一时间推送 , 分享一些你可能注意不到的细节。

ShellProgressBar控制台中漂亮的显示进度条的更多相关文章

  1. Asp.Net实现无刷新文件上传并显示进度条(非服务器控件实现)(转)

    Asp.Net实现无刷新文件上传并显示进度条(非服务器控件实现) 相信通过Asp.Net的服务器控件上传文件在简单不过了,通过AjaxToolkit控件实现上传进度也不是什么难事,为什么还要自己辛辛苦 ...

  2. easyui datagrid显示进度条控制操作

    在当我们需要控制时间前台实际项目页面datagrid显示进度条的数据加载时运行,和datagrid默认情况下只在有url加载运行时的数据显示方式的进度条.下面的代码手动控制: 打开一个进度条: $(' ...

  3. C#调用耗时函数时显示进度条浅探

    最近在做一个VSS日志分析工具,使用C#进行开发,在完成了所有功能后,发现,从服务器下载VSS日志非常耗时,因为此,导致工具使用体验不好,所以,准备增加一个进度条.鉴于C#不经常使用,一下子搞个进度条 ...

  4. 基于Jquery插件Uploadify实现实时显示进度条上传图片

    网址:http://www.jb51.net/article/83811.htm     这篇文章主要介绍了基于Jquery插件Uploadify实现实时显示进度条上传图片的相关资料,感兴趣的小伙伴们 ...

  5. 上传媒体文件--添加显示进度条 layui的upload控件

    上传媒体文件--添加显示进度条   layui的upload控件 详细上传功能请参考博客:上传文件--媒体文件+获取上传文件的属性信息 layui的upload控件 - じ逐梦 - 博客园 (cnbl ...

  6. 任务栏显示进度条 CreateComObject(CLSID_TaskbarList) as ITaskbarList4

    http://www.cnblogs.com/jxsoft/archive/2011/06/02/2067712.html //在任务栏显示 进度条 unit Unit9; interface use ...

  7. WPF下载远程文件,并显示进度条和百分比

    WPF下载远程文件,并显示进度条和百分比 1.xaml <ProgressBar HorizontalAlignment="Left" Height="10&quo ...

  8. (委托事件处理)关于多线程执行显示进度条的实例(转)&&线程间操作无效: 从不是创建控件“rtxtEntryNO”的线程访问它。

    关于多线程执行显示进度条的实例! 之前回答了一篇关于怎么在线程中操作进度条的帖子,估计有人看的不是很明白今天没事,写了一个小小的实例,很简单,就2个文件权当抛砖引玉,希望有更好解决方案的人发表一下意见 ...

  9. android标题栏(titlebar)显示进度条

    在后台线程中执行各种操作(网络连接.大数据存储)的时候,我们希望让客户能看到后台有操作在进行,那么既能有效的提示用户,又不占用当前操作空间,最好的方法就是在标题栏有个进度条. [代码] [Java]代 ...

  10. ProgressIndicator显示进度条以及一些文字信息

    //ProgressIndicator可以显示进度条以及一些文字信息,不过这个属性一般都在cs文件中操作. private void PhoneApplicationPage_Loaded(objec ...

随机推荐

  1. Open Graph protocol

    大纲介绍 Open Graph protocol 是 facebook 2010 年推出的一套规范, 用途是通过一些简单的 meta tag 来描述网站的内容. 这样在 sharing 网址的时候就可 ...

  2. CF228E 题解

    CF228E 题解 题目简述 给定一个 \(n\) 个点,\(m\) 条边的无向图,每条边都为 \(0\) 或 \(1\),可以进行若干次操作,与此点相连的所有点权值取反,求一种方案使得所有边都变为 ...

  3. abc292[AtCoder Beginner Contest 292] 题解

    写点题目转换下心情吧 A-CAPS LOCK 大水题 B-Yellow and Red Card 大水题 C-Four Variables 给定一个数\(N\),问有多少个有序正数数组\((A,B,C ...

  4. vue前端开发仿钉图系列(5)右侧编辑页面的开发详解

    右侧编辑页面主要有两个入口,一是添加marker或者线面双击结束的时候,新建数据信息:二是点击底部数据的单元行或者查看编辑或者点击地图上的marker以及线面,编辑相关数据.整理总结不易,如需全部代码 ...

  5. vue 的常用指令以及作用 ·

    1. v-model 多用于表单元素实现双向数据绑定(同 angular 中的 ng-model) 2. v-for 格式: v-for="字段名 in(of) 数组 json" ...

  6. vue-template-admin 模板

    1. 替换登录页的样式 2. settings.js 3. layout 文件夹 4. store 文件夹 4.1 app.js

  7. 18 Transformer 的动态流程

    博客配套视频链接: https://space.bilibili.com/383551518?spm_id_from=333.1007.0.0 b 站直接看 配套 github 链接:https:// ...

  8. Python 潮流周刊#72:Python 3.13.0 最终版已发布!(摘要)

    本周刊由 Python猫 出品,精心筛选国内外的 250+ 信息源,为你挑选最值得分享的文章.教程.开源项目.软件工具.播客和视频.热门话题等内容.愿景:帮助所有读者精进 Python 技术,并增长职 ...

  9. day03-了解ajax

    Ajax Ajax即Asynchronous Javascript And XML(异步JavaScript和XML). Ajax是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术,这使得程 ...

  10. KubeSphere 3.4.0 发布:支持 K8s v1.26

    2023 年 07 月 26 日,KubeSphere 开源社区激动地向大家宣布,KubeSphere 3.4.0 正式发布! 让我们先简单回顾下之前三个大版本的主要变化: KubeSphere 3. ...