C#开发系统服务时用的定时器组件

8/3/2015来源:C#应用人气:2994

C#开发系统服务时用的定时器组件[csharp]view plaincopy
  1. //相较上一版本改进
  2. //1.修改Bug
  3. //当设置每月一次频率时,设置的Day日期如果为31,30,29,在有些年份的有些月份会抛出异常,因为有些月份是没有31天的,改正之后,
  4. //如果设置了31天,则只有有31天的月份会执行。
  5. //2.修正一年中某天的日期较验功能。
  6. //3.新增加循环模式
  7. //每个月最后一天执行一次。
  8. //4.支持到秒的定时

[csharp]view plaincopy
  1. usingSystem;
  2. usingSystem.Text;
  3. usingSystem.Windows.Forms;
  4. usingUpSoft.Framework.CommonFunction.WinService;
  5. namespaceTestPRoject
  6. {
  7. ///<summary>
  8. ///测试服务
  9. ///</summary>
  10. publicclassTestServices:ServiceTimerControl
  11. {
  12. ///<summary>
  13. ///服务代码
  14. ///</summary>
  15. protectedoverridevoidStartService()
  16. {
  17. //需要处理的服务代码
  18. }
  19. ///<summary>
  20. ///时间配置策略名(可不重写。默认读配置文件中的default)
  21. ///</summary>
  22. publicoverridestringConfigName{get{return"A";}}
  23. }
  24. }
  25. 要调用时,只需输入以下代码
  26. newTestServices().Start();
[csharp]view plaincopy
  1. //时间策略配置,可选择以下两种之一,配置文件,或是重写实现基类的获取时间策略配置
  2. //1.代码重写
  3. ///<summary>
  4. ///时间策略配置
  5. ///</summary>
  6. ///<returns></returns>
  7. protectedoverrideTimerConfigGetTimerConfig()
  8. {
  9. returnnewTimerConfig{TimerMode=...,...};
  10. }
  11. //2.配置文件实现
[html]view plaincopy
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <configuration>
  3. <configSections>
  4. <sectionname="ServiceTimerConfig"type="UpSoft.Framework.CommonFunction.WinService.ServiceTimerConfigManager,CommonFunction"></section>
  5. </configSections>
  6. <ServiceTimerConfig>
  7. <!--默认采用策略-->
  8. <Default>A</Default>
  9. <!--A配置项(全节点)-->
  10. <Config>
  11. <!--A策略-->
  12. <RefName>A</RefName>
  13. <TimerMode>Interval</TimerMode>
  14. <!--延迟开始处理(单位毫秒)可为空-->
  15. <Delay>10000</Delay>
  16. <!--文件生成时间间隔(单位毫秒,1800000=30分钟)-->
  17. <Interval>600000</Interval>
  18. <!--月份-->
  19. <MonthSeq></MonthSeq>
  20. <!--指定第几天的序号-->
  21. <DaySeq></DaySeq>
  22. <!--定时配置-->
  23. <Times>
  24. <!--一天之中需要执行任务的时间点-->
  25. <TimeValue>11:20:19</TimeValue>
  26. <TimeValue>10:10:43</TimeValue>
  27. <TimeValue>19:10:28</TimeValue>
  28. </Times>
  29. </Config>
  30. <!--B配置项(轮询策略)-->
  31. <Config>
  32. <!--B策略,每隔设置的时间执行一次-->
  33. <RefName>B</RefName>
  34. <TimerMode>Interval</TimerMode>
  35. <!--延迟开始处理(单位毫秒)-->
  36. <Delay>10000</Delay>
  37. <!--文件生成时间间隔(单位毫秒,1800000=30分钟)-->
  38. <Interval>600000</Interval>
  39. </Config>
  40. <!--C配置项(天设置)-->
  41. <Config>
  42. <!--C策略,每周4在配置的时间点上执行-->
  43. <RefName>C</RefName>
  44. <TimerMode>Week</TimerMode>
  45. <!--延迟开始处理(单位毫秒)-->
  46. <Delay>10000</Delay>
  47. <!--每周的星期四的以下时间执行-->
  48. <DaySeq>4</DaySeq>
  49. <!--定时配置-->
  50. <Times>
  51. <!--一天之中需要执行任务的时间点-->
  52. <TimeValue>11:20:19</TimeValue>
  53. <TimeValue>10:10:43</TimeValue>
  54. <TimeValue>19:10:28</TimeValue>
  55. </Times>
  56. </Config>
  57. <!--D配置项(月、天设置)-->
  58. <Config>
  59. <!--D策略,每年12月8号在配置的时间点上执行-->
  60. <RefName>D</RefName>
  61. <TimerMode>Month</TimerMode>
  62. <!--延迟开始处理(单位毫秒)-->
  63. <Delay>10000</Delay>
  64. <!--月份-->
  65. <MonthSeq>12</MonthSeq>
  66. <!--天数-->
  67. <DaySeq>8</DaySeq>
  68. <!--定时配置-->
  69. <Times>
  70. <!--一天之中需要执行任务的时间点-->
  71. <TimeValue>11:20:19</TimeValue>
  72. <TimeValue>10:10:43</TimeValue>
  73. <TimeValue>19:10:28</TimeValue>
  74. </Times>
  75. </Config>
  76. </ServiceTimerConfig>
  77. </configuration>
  78. //TimerMode的定义
  79. publicenumTimerMode
  80. {
  81. ///<summary>
  82. ///轮询方式
  83. ///</summary>
  84. Interval=0,
  85. ///<summary>
  86. ///一个月中某个天数的指定时间
  87. ///</summary>
  88. Month=1,
  89. ///<summary>
  90. ///一周中的周几的指定时间
  91. ///</summary>
  92. Week=2,
  93. ///<summary>
  94. ///一天中的指定时间
  95. ///</summary>
  96. Day=3,
  97. ///<summary>
  98. ///一年中第几天的指定时间
  99. ///</summary>
  100. Year=4,
  101. ///<summary>
  102. ///一年中的指定日期的指定时间
  103. ///</summary>
  104. Date=5,
  105. ///<summary>
  106. ///每个月倒数第N天
  107. ///</summary>
  108. LastDayOfMonth
  109. ///<summary>
  110. ///未设置
  111. ///</summary>
  112. NoSet
  113. }

以下是组件的源代码

[csharp]view plaincopy
  1. usingSystem;
  2. usingSystem.Collections.Generic;
  3. usingSystem.Configuration;
  4. usingSystem.Text.RegularExpressions;
  5. usingSystem.Threading;
  6. usingSystem.Xml;
  7. namespaceUpSoft.Framework.CommonFunction.WinService
  8. {
  9. ///<summary>
  10. ///服务定时器管理
  11. ///</summary>
  12. publicabstractclassServiceTimerControl
  13. {
  14. #region私有成员
  15. ///<summary>
  16. ///定时器
  17. ///</summary>
  18. privateTimerSysTimer{get;set;}
  19. ///<summary>
  20. ///是否启用定时器
  21. ///</summary>
  22. privatebool_EnabledTimer=true;
  23. ///<summary>
  24. ///服务执行状态,0-休眠,1-运行
  25. ///</summary>
  26. privateint_serviceStatus=0;
  27. #endregion
  28. #region公共属性
  29. ///<summary>
  30. ///获取服务状态
  31. ///</summary>
  32. publicintServiceStatus{get{return_serviceStatus;}}
  33. ///<summary>
  34. ///定时器配置
  35. ///</summary>
  36. publicTimerConfigConfig{get;set;}
  37. ///<summary>
  38. ///时间计算类
  39. ///</summary>
  40. publicTimerControlTimerControl{get;set;}
  41. ///<summary>
  42. ///配置名称
  43. ///</summary>
  44. publicvirtualstringConfigName{get{return(ServiceTimerConfigManager.ServiceConfig==null?"":ServiceTimerConfigManager.ServiceConfig.Default);}}
  45. #endregion