自己一直想做个定时任务工具,以前一直时间做,最近,在寝室,每天都为电脑连网烦恼,自己就花了时间做了一个定时自动运行程序的小工具,C#winform程序先看一下它的界面:这里面知识点还比较多,下面动手一步一步做,也不难的。新建一个窗体应用程序项目,我的项目名就是:新建一个接口,ISchedule.cs内容如下:usingSystem;usingSystem.Collections.Generic;usingSystem.Text;namespace定时任务工具{//任务计划接口和一些标准实现#region任务计划接口和一些标准实现////summary///计划的接口////summarypublicinterfaceISchedule{///summary///返回最初计划执行时间////summaryDateTimeExecutionTime{get;set;}///summary///初始化执行时间于现在时间的时间刻度差////summarylongDueTime{get;}///summary///循环的周期////summarylongPeriod{get;}}#endregion}再新建一个类,CycExecution.cs定义执行定时任务计划的相关参数,内容如下:usingSystem;usingSystem.Collections.Generic;usingSystem.Text;namespace定时任务工具{///summary///周期性的执行计划////summarypublicclassCycExecution:ISchedule{///summary///构造函数,在一个将来时间开始运行////summary///paramname=shedule计划执行的时间/param///paramname=period周期时间/parampublicCycExecution(DateTimeshedule,TimeSpanperiod){m_schedule=shedule;m_period=period;}///summary///构造函数,马上开始运行////summary///paramname=period周期时间/parampublicCycExecution(TimeSpanperiod){m_schedule=DateTime.Now;m_period=period;}privateDateTimem_schedule;privateTimeSpanm_period;//ISchedule成员#regionISchedule成员publiclongDueTime{get{longms=(m_schedule.Ticks-DateTime.Now.Ticks)/10000;if(ms0)ms=0;returnms;}}publicDateTimeExecutionTime{get{//TODO:添加CycExecution.ExecutionTimegetter实现returnm_schedule;}set{m_schedule=value;}}publiclongPeriod{get{//TODO:添加CycExecution.Periodgetter实现returnm_period.Ticks/10000;}}#endregion}}再新建一个具体实现定时器任务的类,Task.cs内容如下:usingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.Threading;namespace定时任务工具{////summary///计划任务基类///启动的任务会在工作工作线程中完成,调用启动方法后会立即返回。//////用法:///(1)如果你要创建自己的任务,需要从这个类继承一个新类,然后重载Execute(objectparam)方法.///实现自己的任务,再把任务加入到任务管理中心来启动和停止。///比如:///TaskCentercenter=newTaskCenter();///TasknewTask=newTask(newImmediateExecution());///center.AddTask(newTask);///center.StartAllTask();///(2)直接把自己的任务写入TimerCallBack委托,然后生成一个Task类的实例,///设置它的Job和JobParam属性,再Start就可以启动该服务了。此时不能够再使用任务管理中心了。///比如:///TasknewTask=newTask(newImmediateExecution());///newTask.Job+=newTimerCallback(newTask.Execute);///newTask.JobParam=Testimmedialtetask;//添加自己的参数///newTask.Start();///////summarypublicclassTask{/**////summary///构造函数////summary///paramname=schedule为每个任务制定一个执行计划/parampublicTask(IScheduleschedule){if(schedule==null){throw(newArgumentNullException(schedule));}m_schedule=schedule;}/**////summary///启动任务////summarypublicvoidStart(){//启动定时器m_timer=newTimer(m_execTask,m_param,m_schedule.DueTime,m_schedule.Period);}/**////summary///停止任务////summarypublicvoidStop(){//停止定时器m_timer.Change(Timeout.Infinite,Timeout.Infinite);}/**////summary///任务内容////summary///paramname=param任务函数参数/parampublicvirtualvoidExecute(objectparam){//你需要重载该函数,但是需要在你的新函数中调用base.Execute();m_lastExecuteTime=DateTime.Now;if(m_schedule.Period==Timeout.Infinite){m_nextExecuteTime=DateTime.MaxValue;//下次运行的时间不存在}else{TimeSpanperiod=newTimeSpan(m_schedule.Period*1000);m_nextExecuteTime=m_lastExecuteTime+period;}}/**////summary///任务下执行时间////summarypublicDateTimeNextExecuteTime{get{returnm_nextExecuteTime;}}DateTimem_nextExecuteTime;/**////summary///执行任务的计划////summarypublicIScheduleShedule{get{returnm_schedule;}}privateISchedulem_schedule;/**////summary///系统定时器////summaryprivateTimerm_timer;/**////summary///任务内容////summarypublicTimerCallbackJob{get{returnm_execTask;}set{m_execTask=value;}}privateTimerCallbackm_execTask;/**////summary///任务参数////summarypublicobjectJobParam{set{m_param=value;}}privateobjectm_param;/**////summary///任务名称////summarypublicstringName{get{returnm_name;}set{m_name=value;}}privatestringm_name;/**////summary///任务描述////summarypublicstringDescription{get{returnm_description;}set{m_description=value;}}privatestringm_description;/**////summary///该任务最后一次执行的时间////summarypublicDateTimeLastExecuteTime{get{returnm_lastExecuteTime;}}privateDateTimem_lastExecuteTime;}}再定义一个可以同时进行多个task任务的类,TaskCenter.cs内容如下:usingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.Collections;usingSystem.Threading;//usingNUnit.Framework;namespace定时任务工具{////summary///任务管理中心///使用它可以管理一个或则多个同时运行的任务////summary//[TestFixture]publicclassTaskCenter{/**////summary///构造函数////summarypublicTaskCenter(){m_scheduleTasks=newArrayList();}/**////summary///添加任务////summary///paramname=newTask新任务/parampublicvoidAddTask(TasknewTask){m_scheduleTasks.Add(newTask);}/**////summary///删除任务////summary///paramname=delTask将要删除的任务,你可能需要停止掉该任务/parampublicvoidDelTask(TaskdelTask){m_scheduleTasks.Remove(delTask);}/**////summary///启动所有的任务////summarypublicvoidStartAllTask(){foreach(TasktaskinScheduleTasks){StartTask(task);}}/**////summary///启动一个任务////summary///paramname=task/parampublicvoidStartTask(Tasktask){//标准启动方法if(task.Job==null){task.Job+=newTimerCallback(task.Execute);}task.Start();}/**////summary///终止所有的任务////summarypublicvoidTerminateAllTask(){foreach(TasktaskinScheduleTasks){TerminateTask(task);}}/**////summary///终止一个任务////summary