新闻中心

C# 如何实现一个命令行进度条 - Console类的光标操作

2025-12-04
浏览次数:
返回列表
进度条核心是用Console.SetCursorPosition(0, y)复位光标原地刷新,固定长度、百分比显示、自动覆盖;需禁用快速编辑、设置UTF8编码、完成时换行,多线程需同步。

c# 如何实现一个命令行进度条 - console类的光标操作

用 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科研绘图 MedPeer科研绘图

生物医学领域的专业绘图解决方案,告别复杂绘图,专注科研创新

MedPeer科研绘图 166 查看详情 MedPeer科研绘图
  • 运行前加 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电源选项启用高性能释放硬件潜力【方法】 

搜索