C# 服务器定时器代码
主要代码:
1. ITask.cs
2. TaskSchedule.cs
3. TimeCalculations.cs
4. TimerStrategyConfig.cs
5. TimerStrategyManager.cs
1. 所有用户代码都继承该类ITask .
using BlueVision.ShianYuan.Framework; using System; namespace BlueVision.ShianYuan.TestProject { /// <summary> /// 测试用户 /// </summary> public class TestService : ITask { /// <summary> /// 开始服务 /// </summary> protected override void OnStart(params object[] Params) { System.Windows.Forms.MessageBox.Show("处理一个任务完成!"); } protected override void OnStop() { System.Windows.Forms.MessageBox.Show("停止服务!"); } protected override void OnThrowException(Exception ex) { System.Windows.Forms.MessageBox.Show("出现异常!"); } } } using BlueVision.ShianYuan.Framework; using System; namespace BlueVision.ShianYuan.TestProject { /// <summary> /// 测试用户 /// </summary> public class TestService : ITask { /// <summary> /// 开始服务 /// </summary> protected override void OnStart(params object[] Params) { System.Windows.Forms.MessageBox.Show("处理一个任务完成!"); } protected override void OnStop() { System.Windows.Forms.MessageBox.Show("停止服务!"); } protected override void OnThrowException(Exception ex) { System.Windows.Forms.MessageBox.Show("出现异常!"); } } }
之后,可以选择执行该子类.
var service = new TestService(); //开始执行 service.Start(new TimerStrategy { TimerMode = TimerStrategyMode.EveryDay, Reentrant = true, StrategyByDay = new TimerStrategyByDay { TimePoints = new TimeSpan[] { new TimeSpan( 17, 20, 2 ), new TimeSpan( 17, 30, 4 ), new TimeSpan( 17, 40, 6 ), new TimeSpan( 17, 50, 8 ) } } }); //停止可以执行: service.Stop(); var service = new TestService(); //开始执行 service.Start(new TimerStrategy { TimerMode = TimerStrategyMode.EveryDay, Reentrant = true, StrategyByDay = new TimerStrategyByDay { TimePoints = new TimeSpan[] { new TimeSpan( 17, 20, 2 ), new TimeSpan( 17, 30, 4 ), new TimeSpan( 17, 40, 6 ), new TimeSpan( 17, 50, 8 ) } } });
//停止可以执行:
service.Stop();
或是
/// 定时说明 /// 只要调用StartSchedule,任务就自动按照定时规则开始定时 /// 定时策略为: 每天,在设定的TimeSpan时间点上都执行一次,而且是可重入的执行,Reetrant为可重入开关 TaskSchedule.StartSchedule("MyTaskFunction", new TestService(), new TimerStrategy { TimerMode = TimerStrategyMode.EveryDay, Reentrant = false, // 不可重入, 即在上一个未执行完成之前,不会执行其它到期的下次任务. StrategyByDay = new TimerStrategyByDay { TimePoints = new TimeSpan[] { new TimeSpan( 17, 20, 2 ), new TimeSpan( 17, 30, 4 ), new TimeSpan( 17, 40, 6 ), new TimeSpan( 17, 50, 8 ) } } }); // 停止所有的计划任务. TaskSchedule.StopSchedule(); // 或停止指定的计划任务 TaskSchedule.StopSchedule("MyTaskFunction"); 以下是时间策略的说明 // 以下表示, 每年的,2-29,5-31,7-30,4-29,6-29的10点,12,16,19点各执行一次. var strategy_A = new TimerStrategy { TimerMode = TimerStrategyMode.Date, Reentrant = false, // 不可重入, 即在上一个未执行完成之前,不会执行其它到期的下次任务. Dates = new List<DATETIME>(new DateTime[] // 年份无关紧要. { new DateTime(4,2,29), new DateTime(4,5,31), new DateTime(4,7,30), new DateTime(4,4,29), new DateTime(4,6,29) }), StrategyByDay = new TimerStrategyByDay { TimePoints = new TimeSpan[] { new TimeSpan(10,0,0), new TimeSpan(12,0,0), new TimeSpan(16,0,0), new TimeSpan(19,0,0), } } }; // 以下表示, 每个月的29,31号的10点,12,16,19点各执行一次.(没有29,31号的月份就不执行.) var strategy_B = new TimerStrategy { TimerMode = TimerStrategyMode.EveryMonth, Days = new List<INT>(new int[] { 29, 31 }), StrategyByDay = new TimerStrategyByDay { TimePoints = new TimeSpan[] { new TimeSpan(10,0,0), new TimeSpan(12,0,0), new TimeSpan(16,0,0), new TimeSpan(19,0,0), } } }; // 以下表示, 每周的星期天,星期三的10,19点各执行一次. var strategy_C = new TimerStrategy { TimerMode = TimerStrategyMode.EveryWeek, Days = new List<INT>(new int[] { 0, 3 }), StrategyByDay = new TimerStrategyByDay { TimePoints = new TimeSpan[] { new TimeSpan(10,0,0), new TimeSpan(19,0,0), } } }; // 以下表示, 每年的 // 2月份的 2-10 // 3月份的 3-10, 3-30, 3-31, // 6月份的 6-10, 6-30 // 9月份的 9-10, 9-30 // 10月份的 10-10, 10-30, 10-31, // 以下各天的10,19点各执行一次. var strategy_D = new TimerStrategy { TimerMode = TimerStrategyMode.Month, Months = new List<INT>(new int[] { 2, 3, 6, 9, 10 }), Days = new List<INT>(new int[] { 10, 30, 31 }), StrategyByDay = new TimerStrategyByDay { TimePoints = new TimeSpan[] { new TimeSpan(10,0,0), new TimeSpan(19,0,0), } } }; // 以下表示, 每个月的倒数,第28天,第1天,第2天 的10,19点各执行一次. (Days最大只允许28,) // 如: 非闰年的2月,就是 2-1,2-27,2-28三天, // 如: 大月份的3月,就是 3-4,3-30,3-31三天 // 如: 小月份的4月,就是 4-3,4-29,4-30三天 var strategy_E = new TimerStrategy { TimerMode = TimerStrategyMode.LastDayOfMonth, Days = new List<INT>(new int[] { 28, 1, 2 }), StrategyByDay = new TimerStrategyByDay { TimePoints = new TimeSpan[] { new TimeSpan(10,0,0), new TimeSpan(19,0,0), } } }; // 以下表示, 每年的第365天,和366天的10,19点各执行一次. (Days最大只允许366,) // 例: 2012年就是 12-30,和12-31两天, 闰年 // 2013年就是 12-31 非闰年,只执行一天. var strategy_F = new TimerStrategy { TimerMode = TimerStrategyMode.EveryYear, Days = new List<INT>(new int[] { 365, 366 }), StrategyByDay = new TimerStrategyByDay { TimePoints = new TimeSpan[] { new TimeSpan(10,0,0), new TimeSpan(19,0,0), } } }; // 以下表示, 每天的10,19点各执行一次. var strategy_G = new TimerStrategy { TimerMode = TimerStrategyMode.EveryDay, StrategyByDay = new TimerStrategyByDay { TimePoints = new TimeSpan[] { new TimeSpan(10,0,0), new TimeSpan(19,0,0), } } }; // 以下表示每隔1小时执行一次. var strategy_H = new TimerStrategy { TimerMode = TimerStrategyMode.EveryDay, Interval = new TimeSpan(1, 0, 0) }; /INT></INT></INT></INT></INT></INT></DATETIME>
补充:软件开发 , C# ,