ShellProgressBar
该库用于在控制台显示进度条.
网址: https://www.nuget.org/packages/ShellProgressBar
安装:
dotnet add package ShellProgressBar --version 5.2.0
该库还支持子进度条.
基本用法
const totalTicks = 10;
var options = new ProgressBarOptions {
ProgressCharacter = '-',
ProgressBarOnBottom = true
};
using (var pbar = new ProgressBar(totalTicks, "初始化标题", options)) {
pbar.Tick(); // 会递进一个进度.
// 也可以在更新进度的时候, 更新文字信息
pbar.Tick("步骤 2 / 10");
}
报告进度
有两种更新进度的方法. 上面的用法使用 Tick()
方法. 第二个方法是使用 IProgress<T>
实例来提交报告, 来更新进度. 该实例可以使用 AsProgress<T>()
方法来获得.
例如:
using ProgressBar progressBar = new ProgressBar(10000, "提示消息");
var progress = progressBar.AsProgress<float>();
progress.Report(0.25); // 推进 25% 的进度.
选项
进度条位置
const int totalTicks = 10;
var options = new ProgressBarOptions {
ProgressCharacter = '-',
ProgressBarOnBottom = true
};
using var pbar = new ProgressBar(totalTicks, "进度条在底部", options);
TickToCompletion(pbar, totalTicks, sleet: 500);
默认情况下, 进度条在消息的上方. 如果需要可以翻转过来.
修改样式
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, "显示关闭样式", options);
TickToCompletion(pbar, totalTicks, sleep: 500);
可以配置前景颜色, 完成颜色, 以及背景颜色等.
非实时更新
默认情况下, 计时器会每隔 500ms 绘制一次屏幕. 可以配置仅在调用 .Tick()
时重绘.
const int totalTicks = 5;
var options = new ProgressBarOptions {
DisplayTimeInRealTime = false
};
using var pbar = new ProgressBar(totalTicks, "只在 Tick 时绘制进度", options);
TickToCompletion(pbar, totalTicks, sleep: 1750);
子进度条
进度条可以有子进度条, 并且可以有单独的样式. 这个处理并行任务很有效.
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 = '-'
};
using var pbar = new ProgressBar(totalTicks, "主进度条", options);
TickToCompletion(pbar, totalTicks, sleep: 10, childAction: () => {
using var child = pbar.Spawn(totalTicks, "子任务", childOptions);
TickToCompletion(child, totalTicks, sleep: 100);
});
子进度条完成后会自动折叠, 为其他并行任务腾出空间. 可以使用配置 CollapseWhenFinished = false
来禁用自动折叠.
var childOptions = new ProgressBarOptions {
ForegroundColor = ConsoleColor.Green,
BackgroundColor = ConsoleColor.DarkGreen,
ProgressBarCharacter = '-',
CollapseWhenFinished = false
};
FixedDurationBar
该类提供固定时长的进度条, 它会自动的进行递进.
通常会使用其暴露出的 IsCompleted
与 CompletedHandle
.