System.Windows.Forms : 控件

是应用于WinForm中的,它是通过Windows消息机制实现的,类似于VB或Delphi中 的Timer控件,内部使用API SetTimer实现的。它的主要缺点是计时不精确,而且必须有消息循环,Console Application(控制台应用程序)无法使用。

System.Threading.Timer

System.Timers.Timer和System.Threading.Timer非常类似,它们是通过.NET Thread Pool实现的,轻量,计时精确,对应用程序、消息没有特别的要求

System.Timers.Timer

System.Timers.Timer还可以应用于WinForm,完全取代上面的 Timer控件。它们的缺点是不支持直接的拖放,需要手工编码。

  1. //实例化Timer类,设置间隔时间为10000毫秒;
  2. System.Timers.Timer t = new System.Timers.Timer(10000);
  3. //到达时间的时候执行事件;
  4. t.Elapsed += new System.Timers.ElapsedEventHandler(theout);
  5. //设置是执行一次(false)还是一直执行(true);
  6. t.AutoReset = true;
  7. //是否执行System.Timers.Timer.Elapsed事件;
  8. t.Enabled = true;
  9. public void theout(object source, System.Timers.ElapsedEventArgs e)
  10. {
  11. MessageBox.Show("OK!");
  12. }

定时任务

  1. public partial class CommandTimerTask
  2. {
  3. #region 定时检查
  4. Thread cmdCheckThread = null;
  5. /// <summary>
  6. /// 数据上报线程
  7. /// </summary>
  8. public void CheckCmdTimerThread()
  9. {
  10. #region 数据上报线程
  11. Panda.Framework.Helper.ConsoleHelper.WriteInfoLine("==》定时检查未发送指令服务启动");
  12. cmdCheckThread = new Thread(CheckCmdTimerTask);
  13. cmdCheckThread.Start();
  14. Panda.Framework.Helper.ConsoleHelper.WriteInfoLine("==》定时检查未发送指令服务完成");
  15. #endregion
  16. }
  17. private async void CheckCmdTimerTask()
  18. {
  19. #region 定时检查未发送指令
  20. if (GloalConfigs.CheckCmdTimerTaskRunStatus)
  21. {
  22. return;
  23. }
  24. GloalConfigs.CheckCmdTimerTaskRunStatus = true;
  25. var productConfig = Panda.Framework.PorductSettings.GetConfigInfo();
  26. while (GloalConfigs.CheckCmdTimerTaskRunStatus)
  27. {
  28. #region 定时检查指令
  29. try
  30. {
  31. #region 业务功能
  32. Panda.Framework.Helper.ConsoleHelper.WriteSuccessLine($"定时检查指令:开始...");
  33. ....
  34. #endregion
  35. }
  36. catch (Exception ex)
  37. {
  38. Panda.Framework.Helper.ConsoleHelper.WriteInfoLine($"CheckCmdTimerTask Thread error,{ ex.Message }");
  39. }
  40. finally
  41. {
  42. Panda.Framework.Helper.ConsoleHelper.WriteInfoLine($"定时检查指令:下次执行时间{ DateTime.Now.AddMilliseconds(GloalConfigs.CheckCmdTimerTaskSleep).ToString("yyyy-MM-dd HH:mm:ss") }");
  43. await Task.Delay(GloalConfigs.CheckCmdTimerTaskSleep);
  44. }
  45. #endregion
  46. }
  47. #endregion
  48. }
  49. #endregion
  50. }