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("出现异常!");
		}
	}
}

之后,可以选择执行该子类.

	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
  
  
   
   (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
   
   
    
    (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
    
    
     
     (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
     
     
      
      (new int[] { 2, 3, 6, 9, 10 }),
		Days = new List
      
      
        (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 
       
         (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 
        
          (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) }; 
         
        
      
     
     
    
    
   
   
  
  

Demo下载地址:http://download.csdn.net/detail/linux7985/5857963

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

烈火蜓蜻

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值