控制台显示动态进度条

  1. private static void Main(string[] args)
  2. {
  3. bool isBreak = false;
  4. ConsoleColor colorBack = Console.BackgroundColor;
  5. ConsoleColor colorFore = Console.ForegroundColor;
  6. //第一行信息
  7. Console.WriteLine("****** now working...******");
  8. //第二行绘制进度条背景
  9. Console.BackgroundColor = ConsoleColor.DarkCyan;
  10. for (int i = 0; ++i <= 25;)
  11. {
  12. Console.Write(" ");
  13. }
  14. Console.WriteLine(" ");
  15. Console.BackgroundColor = colorBack;
  16. //第三行输出进度
  17. Console.WriteLine("0%");
  18. //第四行输出提示,按下回车可以取消当前进度
  19. Console.WriteLine("Press Enter To Break.");
  20. //-----------------------上面绘制了一个完整的工作区域,下面开始工作
  21. //开始控制进度条和进度变化
  22. for (int i = 0; ++i <= 100;)
  23. {
  24. //先检查是否有按键请求,如果有,判断是否为回车键,如果是则退出循环
  25. if (Console.KeyAvailable && System.Console.ReadKey(true).Key == ConsoleKey.Enter)
  26. {
  27. isBreak = true; break;
  28. }
  29. //绘制进度条进度
  30. Console.BackgroundColor = ConsoleColor.Yellow;//设置进度条颜色
  31. Console.SetCursorPosition(i / 4, 1);//设置光标位置,参数为第几列和第几行
  32. Console.Write(" ");//移动进度条
  33. Console.BackgroundColor = colorBack;//恢复输出颜色
  34. //更新进度百分比,原理同上.
  35. Console.ForegroundColor = ConsoleColor.Green;
  36. Console.SetCursorPosition(0, 2);
  37. Console.Write("{0}%", i);
  38. Console.ForegroundColor = colorFore;
  39. //模拟实际工作中的延迟,否则进度太快
  40. System.Threading.Thread.Sleep(100);
  41. }
  42. //工作完成,根据实际情况输出信息,而且清楚提示退出的信息
  43. Console.SetCursorPosition(0, 3);
  44. Console.Write(isBreak ? "break!!!" : "finished.");
  45. Console.WriteLine(" ");
  46. //等待退出
  47. Console.ReadKey(true);
  48. }