新闻中心
C# 如何实现一个命令行进度条 - Console类的光标操作
进度条核心是用Console.SetCursorPosition(0, y)复位光标原地刷新,固定长度、百分比显示、自动覆盖;需禁用快速编辑、设置UTF8编码、完成时换行,多线程需同步。

用 Console.SetCursorPosition 实现进度条核心逻辑
命令行进度条的关键不是重绘整行,而是复用同一行位置。C# 的 Console.SetCursorPosition(x, y) 允许你把光标“挪回去”,覆盖原有文字。比如进度条显示在第 10 行,每次更新前先调用 Console.SetCursorPosition(0, 10),再输出新内容,就能实现原地刷新,避免滚动刷屏。
构造一个简洁可复用的进度条方法
不需要第三方库,几行代码就能封装好。重点是:固定长度、支持百分比、自动覆盖、结尾不换行。示例如下:
(注意:需在循环中调用,且确保不被其他 Console.WriteLine 干扰)
- 定义总长
度(如 50 字符),用 '█'表示已完成部分,'.'或空格表示剩余 - 每次更新时计算当前填充宽度:
int filled = (int)Math.Round(progress * totalWidth) - 拼出字符串:
new string('█', filled) + new string('.', totalWidth - filled) - 调用
Console.SetCursorPosition(0, Console.CursorTop)回到本行开头,再Console.Write(...) - 最后加
Console.Write($" {progress:P0}")显示百分比,保持在同一行
避免光标错位和乱码的实用细节
Windows 控制台默认启用“快速编辑模式”,用户点一下就会暂停程序,导致光标位置异常。上线前建议关闭:
MedPeer科研绘图
生物医学领域的专业绘图解决方案,告别复杂绘图,专注科研创新
166
查看详情
- 运行前加
Console.TreatControlCAsInput = true;防止 Ctrl+C 中断光标逻辑 - 用
Console.OutputEncoding = System.Text.Encoding.UTF8;确保 █ 等符号正常显示 - 若进度条后还有输出,记得在完成时补个
Console.WriteLine()换行,否则后续日志会挤在进度条后面 - 多线程更新进度条?必须加锁或改用
Interlocked更新进度值,再由主线程统一刷新
一个开箱即用的最小示例
复制粘贴就能跑,模拟 3 秒加载过程:
var total = 100;
for (int i = 0; i <= total; i++)
{
double progress = (double)i / total;
int width = 40;
int filled = (int)Math.Round(progress * width);
string bar = "[" + new string('█', filled) + new string(' ', width - filled) + "] ";
Console.SetCursorPosition(0, Console.CursorTop);
Console.Write($"{bar}{progress:P0}");
System.Threading.Thread.Sleep(30); // 模拟工作
}
Console.WriteLine(); // 换行收尾
基本上就这些。不复杂但容易忽略光标定位和编码问题,调通一次,后续项目直接复用。
以上就是C# 如何实现一个命令行进度条 - Console类的光标操作的详细内容,更多请关注其它相关文章!
# 时计
# 北京网站建设正邦
# 营销线上推广方案ppt
# 邯郸营销推广加盟中心
# 赞皇响应式网站推广
# 网站关键词优化解决方
# 芝罘区网站建设推广公司
# seo有没有效果
# 好网站建设总结模板下载
# 宁波seo外贸推广
# 秦皇岛电商网站建设费用
# 就会
# 与非
# c#
# 复用
# 如何实现
# 换行
# 多线程
# 命令行
# 就能
# 进度条
# 重绘
# win
# 编码
# windows
# 命令行进度条
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
实现分段式页面滚动导航:CSS与J*aScript教程
虚幻5科幻题材ARPG大作遭取消!本是《奇异人生》厂商新作
4399网页游戏电脑版全新入口 4399电脑端在线玩指南
如何将HTML表格多行数据保存到Google Sheet
C++的std::forward_list怎么用_C++ STL中单向链表容器的特点与应用
Win10系统怎么查看已安装更新_Win10卸载有问题的更新补丁
抖音隐秘迷城小游戏入口_ 抖音冒险解谜小游戏秒玩
J*aScript中高效管理与清空动态列表:避免循环陷阱
C++如何打印当前代码行号与文件名_C++预定义宏FILE与LINE的使用
向日葵客户端怎么进行远程CentOS控制_向日葵客户端远程CentOS控制操作教程
J*aScript 字符串标签转换:使用正则表达式高效替换
抓大鹅解压小游戏 抓大鹅摸鱼解压入口
如何在CSS中使用visited与link控制链接颜色_visited link伪类配合
探索高级语言到C/C++的转译路径:以Go为例及内存管理策略
QQ邮箱官方网站登录入口_QQ邮箱网页版在线使用
Lar*el DB::listen 事件中的查询执行时间单位解析
qq邮箱发邮件给国外发不出去_QQ邮箱国际邮件发送失败原因与解决
Golang指针如何与map组合使用_Golang map指针组合实践
漫蛙manwa2最新登录网址_漫蛙manwa2手机网页版入口
微信客户端如何收红包_微信客户端接收红包使用教程
抖音小游戏合成大西瓜免费秒玩入口链接 抖音小游戏热门合集秒玩网站
如何使用spryker/configurable-bundles-products-resource-relationship模块解决复杂产品捆绑关系难题
如何将一个大型PHP应用拆分为多个Composer包_微服务与模块化架构的Composer实践
漫蛙漫画登录站点 漫蛙2正版漫画快速访问
J*a应用程序首次运行自动创建文件与目录的最佳实践
谷歌浏览器一键优化方案_谷歌浏览器直达主页极速不卡版
win11专注助手在哪 Win11免打扰模式设置与自动化规则【指南】
AO3镜像入口大全 AO3网页版内容访问全集
Bing引擎入口最新2025 Bing搜索免费官方登录
深入理解J*aScript中的B样条曲线与节点向量生成
在J*a中如何开发在线活动报名与管理系统_活动报名管理项目实战解析
精准捕获:如何在页面中监听除特定元素外的所有点击事件
J*aScript对象创建方式_J*aScript设计模式应用
QQ邮箱登录平台入口 QQ邮箱网页版邮箱官方入口
qq音乐在线播放入口_qq音乐电脑版登录链接
J*aScript Promise链中如何正确终止后续.then执行并处理错误
QQ邮箱登录官网首页 腾讯QQ邮箱网页入口
QQ邮箱稳定登录入口_QQ邮箱官方网站网页版使用
使用Python高效删除Word宏并转换DOCM为DOCX格式
三星GalaxyZFold5怎样在相册制作折叠屏分镜_iPhone三星GalaxyZFold5相册制作折叠屏分镜【创意编辑】
蛙漫2日版入口 WAMAN2(日版)无删减漫画官网链接
sublime如何处理大型CSV文件的列对齐_sublime高级表格编辑插件指南
sublime如何配置Python开发环境_将sublime打造成轻量级Python IDE
漫蛙2在线漫画入口 漫蛙正版漫画网页版直达
Win11输入法不见了怎么办_Windows11恢复语言栏显示方法
海棠账号登录入口_登录海棠账户同步阅读记录
Golang如何使用bytes.Split分割字节切片_Golang bytes切片分割方法
魅族20怎样在浏览器开无图省流_iPhone魅族20浏览器开无图省流【流量节省】
126邮箱账号注册 电脑版登录入口
Win11怎么开启卓越性能模式 Win11电源选项启用高性能释放硬件潜力【方法】


2025-12-04
浏览次数:次
返回列表
度(如 50 字符),用