SchedulerService.cs 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. using System;
  2. using System.Timers;
  3. namespace DRG.DRGInterfaceClient
  4. {
  5. /// <summary>hourly 调度:程序内整点轮询(常驻托盘时生效)。</summary>
  6. internal class SchedulerService
  7. {
  8. private Timer _timer;
  9. private DateTime _lastRun = DateTime.MinValue;
  10. private MainForm _form;
  11. public bool IsRunning { get; private set; }
  12. public string NextRunText { get; internal set; }
  13. public string Description { get; internal set; }
  14. public SchedulerService(MainForm form) { _form = form; }
  15. public void StartHourly()
  16. {
  17. if (_timer != null) Stop();
  18. _timer = new Timer(60 * 1000); // 每分钟检查一次
  19. _timer.Elapsed += OnTick;
  20. _timer.AutoReset = true;
  21. IsRunning = true;
  22. _timer.Start();
  23. Logger.Info("hourly 内部整点轮询已启动");
  24. }
  25. private void OnTick(object sender, ElapsedEventArgs e)
  26. {
  27. if (DateTime.Now.Minute != 0) return; // 仅整点
  28. if ((DateTime.Now - _lastRun).TotalMinutes < 55) return; // 同一小时不重复
  29. _lastRun = DateTime.Now;
  30. try { _form.TriggerSync(); }
  31. catch (Exception ex) { Logger.Error("hourly 触发同步异常", ex); }
  32. }
  33. public void Stop()
  34. {
  35. IsRunning = false;
  36. if (_timer != null) { _timer.Stop(); _timer.Dispose(); _timer = null; }
  37. Logger.Info("内部轮询已停止");
  38. }
  39. internal void Start(SyncConfig syncConfig)
  40. {
  41. throw new NotImplementedException();
  42. }
  43. }
  44. }