自己一直想做个定时任务工具,以前一直时间做,最近,在寝室,每天都为电脑连网烦恼,自己就花了时间做了一个定时自动运行程序的小工具,C#winform程序先看一下它的界面:
这里面知识点还比较多,下面动手一步一步做,也不难的。
新建一个窗体应用程序项目,我的项目名就是:
新建一个接口,ISchedule.cs内容如下:
using System;
using System.Collections.Generic;
using System.Text;
namespace 定时任务工具
{
writeline教程 //任务计划接口和一些标准实现
#region 任务计划接口和一些标准实现
//// <summary>
/// 计划的接口
/// </summary>
public interface ISchedule
{
/// <summary>
/// 返回最初计划执行时间
/// </summary>
DateTime ExecutionTime
{
get;
set;
}
/// <summary>
/// 初始化执行时间于现在时间的时间刻度差
/// </summary>
long DueTime
{
get;
}
/// <summary>
/// 循环的周期
/// </summary>
long Period
{
get;
}
}
#endregion
}
再新建一个类,CycExecution.cs 定义执行定时任务计划的相关参数,内容如下:
using System;
using System.Collections.Generic;
using System.Text;
namespace 定时任务工具
{
/// <summary>
/// 周期性的执行计划
/// </summary>
public class CycExecution : ISchedule
{
/// <summary>
/// 构造函数,在一个将来时间开始运行
/// </summary>
/// <param name="shedule">计划执行的时间</param>
/// <param name="period">周期时间</param>
public CycExecution(DateTime shedule, TimeSpan period)
{
m_schedule = shedule;
m_period = period;
}
/// <summary>
/// 构造函数,马上开始运行
/// </summary>
/// <param name="period">周期时间</param>
public CycExecution(TimeSpan period)
{
m_schedule = DateTime.Now;
m_period = period;
}
private DateTime m_schedule;
private TimeSpan m_period;
//ISchedule 成员
#region ISchedule 成员
public long DueTime
{
get
{
long ms = (m_schedule.Ticks - DateTime.Now.Ticks) / 10000;
if (ms < 0) ms = 0;
return ms;
}
}
public DateTime ExecutionTime
{
get
{
// TODO: 添加 CycExecution.ExecutionTime getter 实现
return m_schedule;
}
set
{
m_schedule = value;
}
}
public long Period
{
get
{
// TODO: 添加 CycExecution.Period getter 实现
return m_period.Ticks / 10000;
}
}
#endregion
}
}
再新建一个具体实现定时器任务的类,Task.cs 内容如下:
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
namespace 定时任务工具
{
//// <summary>
/// 计划任务基类
/// 启动的任务会在工作工作线程中完成,调用启动方法后会立即返回。
///
/// 用法:
/// (1)如果你要创建自己的任务,需要从这个类继承一个新类,然后重载Execute(object param)方法.
/// 实现自己的任务,再把任务加入到任务管理中心来启动和停止。
/// 比如:
/// TaskCenter center = new TaskCenter();
/// Task newTask = new Task( new ImmediateExecution());
/// center.AddTask(newTask);
/// center.StartAllTask();
/// (2)直接把自己的任务写入TimerCallBack委托,然后生成一个Task类的实例,
/// 设置它的Job和JobParam属性,再Start就可以启动该服务了。此时不能够再使用任务管理中心了。
/// 比如:
/// Task newTask = new Task( new ImmediateExecution());
/// newTask.Job+= new TimerCallback(newTask.Execute);
/// newTask.JobParam = "Test immedialte task"; //添加自己的参数
/// newTask.Start();
///
/// </summary>
public class Task
{
/**/
/// <summary>
/// 构造函数
/// </summary>
/// <param name="schedule">为每个任务制定一个执行计划</param>
public Task(ISchedule schedule)
{
if (schedule == null)
{
throw (new ArgumentNullException("schedule"));
}
m_schedule = schedule;
}
/**/
/// <summary>
/// 启动任务
/// </summary>
public void Start()
{
//启动定时器
m_timer = new Timer(m_execTask, m_param, m_schedule.DueTime, m_schedule.Period);
}
/**/
/// <summary>
/// 停止任务
/// </summary>
public void Stop()
{
//停止定时器
m_timer.Change(Timeout.Infinite, Timeout.Infinite);
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论