您的位置:首页 > 编程语言 > C#

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

2013-07-11 16:08 351 查看
主要代码:

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: