BlackBoxTool.cs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. using Azylee.BlackBox.Models;
  2. using Azylee.Core.AppUtils;
  3. using Azylee.Core.IOUtils.DirUtils;
  4. using Azylee.Core.IOUtils.TxtUtils;
  5. using Azylee.Core.Plus.DataUtils.JsonUtils;
  6. using Azylee.Core.WindowsUtils.APIUtils;
  7. using Azylee.Core.WindowsUtils.InfoUtils;
  8. using System;
  9. using System.Threading;
  10. using System.Threading.Tasks;
  11. namespace Azylee.BlackBox.Utils
  12. {
  13. public sealed class BlackBoxTool
  14. {
  15. #region 单例模式
  16. private static BlackBoxTool _BlackBoxTool;
  17. private static readonly object syncObject = new object();
  18. private BlackBoxTool() { }
  19. public static BlackBoxTool Instance
  20. {
  21. get
  22. {
  23. if (_BlackBoxTool == null)
  24. lock (syncObject)
  25. if (_BlackBoxTool == null)
  26. _BlackBoxTool = new BlackBoxTool();
  27. return _BlackBoxTool;
  28. }
  29. }
  30. #endregion
  31. DateTime Time = DateTime.Now;
  32. int Interval = 1 * 1000;
  33. Task Listener = null;
  34. CancellationTokenSource CancelToken = new CancellationTokenSource();
  35. public bool Start()
  36. {
  37. //如果任务停止运行,则重新创建Token,并释放上次任务
  38. if (Listener != null && Listener.Status != TaskStatus.Running)
  39. {
  40. try
  41. {
  42. CancelToken = new CancellationTokenSource();
  43. Listener.Dispose();
  44. }
  45. catch { }
  46. }
  47. //如果任务没取消,并且没有运行任务,则运行任务
  48. if (!CancelToken.IsCancellationRequested && (Listener == null || Listener.Status != TaskStatus.Running))
  49. {
  50. Listener = Task.Factory.StartNew(() =>
  51. {
  52. try
  53. {
  54. //using (Muse db = new Muse())
  55. //{
  56. // CollectData(db);
  57. while (!CancelToken.IsCancellationRequested)
  58. {
  59. Time = DateTime.Now;
  60. Thread.Sleep(Interval);
  61. CollectData();
  62. }
  63. //}
  64. }
  65. catch { }
  66. }, CancelToken.Token);
  67. return true;
  68. }
  69. return false;
  70. }
  71. public bool Stop()
  72. {
  73. try
  74. {
  75. if (!CancelToken.IsCancellationRequested)
  76. {
  77. CancelToken.Cancel();
  78. }
  79. return true;
  80. }
  81. catch { return false; }
  82. }
  83. private void CollectData()
  84. {
  85. try
  86. {
  87. RunningStatus status = new RunningStatus()
  88. {
  89. Time = Time,
  90. Long = Interval,
  91. AFK = WindowsAPI.GetLastInputTime(),
  92. CpuPer = ComputerStatusTool.CpuUtilization(),
  93. RamSize = (long)ComputerInfoTool.TotalPhysicalMemory(),
  94. RamFree = (long)ComputerInfoTool.AvailablePhysicalMemory(),
  95. SysDriveSize = ComputerInfoTool.GetSystemDriveTotalSize(),
  96. SysDriveFree = ComputerInfoTool.GetSystemDriveAvailableSize(),
  97. AppCpuPer = AppInfoTool.CPU(),
  98. AppRamUsed = AppInfoTool.RAM(),
  99. };
  100. TxtTool.Append(
  101. DirTool.Combine(AppDomain.CurrentDomain.BaseDirectory, "BlackBox-Status.txt"),
  102. JsonTool.ToStr(status));
  103. }
  104. catch { }
  105. }
  106. }
  107. }