ProgressConsoleWriter.cs 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. using System;
  2. using System.Text;
  3. namespace Quadarax.Foundation.Core.Console
  4. {
  5. public class ProgressConsoleWriter : ConsoleWriter
  6. {
  7. #region *** Private Fields ***
  8. private int _maxProgress;
  9. private int _curProgress = 0;
  10. private string _lastText;
  11. #endregion
  12. #region *** Constructors ***
  13. public ProgressConsoleWriter(ConsoleColor foreColor, ConsoleColor backColor, int maxProgress) : base(foreColor, backColor)
  14. {
  15. _maxProgress = maxProgress;
  16. }
  17. public ProgressConsoleWriter(ConsoleColor foreColor, int maxProgress) : base(foreColor)
  18. {
  19. _maxProgress = maxProgress;
  20. }
  21. #endregion
  22. #region *** Public Operations ***
  23. public void SetProgress(int progress)
  24. {
  25. _curProgress = progress;
  26. OnRefreshProgress();
  27. }
  28. public void IncProgress()
  29. {
  30. _curProgress++;
  31. OnRefreshProgress();
  32. }
  33. public void DecProgress()
  34. {
  35. _curProgress--;
  36. OnRefreshProgress();
  37. }
  38. #endregion
  39. #region *** Internal Operations ***
  40. protected override void WriteLineInternal()
  41. {
  42. base.WriteLineInternal();
  43. OnRefreshProgress();
  44. }
  45. protected override void WriteInternal(string text)
  46. {
  47. _lastText = text;
  48. OnRefreshProgress();
  49. }
  50. private void OnRefreshProgress()
  51. {
  52. base.WriteInternal("\r");
  53. base.WriteInternal(new string(' ', System.Console.BufferWidth - 1));
  54. base.WriteInternal("\r");
  55. var sb = new StringBuilder();
  56. sb.Append("[").Append(_curProgress).Append("/").Append(_maxProgress).Append("] ").Append(_lastText);
  57. base.WriteInternal(sb.ToString());
  58. }
  59. protected override void OnDisposing()
  60. {
  61. System.Console.WriteLine();
  62. base.OnDisposing();
  63. }
  64. #endregion
  65. }
  66. }