技术开发 频道

Web程序里实现计划任务

    下面就是调度引擎,定时执行配置对象的任务
public class Scheduler { private SchedulerConfiguration configuration = null; public Scheduler(SchedulerConfiguration config) { configuration = config; } public void Start() { while(true) { //执行每一个任务 foreach(ISchedulerJob job in configuration.Jobs) { ThreadStart myThreadDelegate = new ThreadStart(job.Execute); Thread myThread = new Thread(myThreadDelegate); myThread.Start(); Thread.Sleep(configuration.SleepInterval); } } } }

    所有的准备工作已经完成,下面就是激活引擎的工作了。为了让我们的任务计划执行,我们在Global.asax.cs文件里的Applicatio_Start和Application_End里进行建立和销毁工作,首先建立一个调度进程运行的线程,我们这里的运行间隔时间为3秒钟。

public System.Threading.Thread schedulerThread = null; protected void Application_Start(Object sender, EventArgs e) { SchedulerConfiguration config = new SchedulerConfiguration(1000*3); config.Jobs.Add(new SampleJob()); Scheduler scheduler = new Scheduler(config); System.Threading.ThreadStart myThreadStart = new System.Threading.ThreadStart(scheduler.Start); System.Threading.Thread schedulerThread = new System.Threading.Thread(myThreadStart); schedulerThread.Start(); }

    最后还需要在程序退出时进行销毁:

protected void Application_End(Object sender, EventArgs e) { if (null != schedulerThread) { schedulerThread.Abort(); } }

    好了,在VS.NET里建立一个C#的Web应用程序工程,建立TaskScheduler.cs类,并修改相应的Global.asax.cs文件。为了能看到效果,我们再建立一个表单WebForm1.aspx,定时刷新来检查我们所记录的数据:

<%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="CSTest.WebForm1" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > <HTML> <HEAD> <title>在Web应用程序中执行计划任务的例子</title> <meta http-equiv="refresh" content="10"> <meta name="GENERATOR" Content="Microsoft Visual Studio 7.0"> <meta name="CODE_LANGUAGE" Content="C#"> <meta name="vs_defaultClientScript" content="JavaScript"> <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5"> </HEAD> <body MS_POSITIONING="GridLayout"> <form id="Form1" method="post" runat="server"> <iframe style="width:100%;height:100%" src="SchedulerJob/SchedulerJob.txt"></iframe> </form> </body> </HTML>

    对工程进行编译并运行,就可以看到结果了,结果如下:

    计划任务测试开始:
    2003-13-10 11:08:15
    2003-13-10 11:08:18
    2003-13-10 11:08:21
    2003-13-10 11:08:24
    2003-13-10 11:08:27
    2003-13-10 11:08:30

    需要说明的是,以上只是在Web应用程序中执行计划任务的简单例子,对于多个任务来说,需要在不同的线程内进行工作,对计划的安排也是很简单的,实际还需要站点堵塞,当机的情况。另外这里也没有进行错误的处理等工作,相信大家会写出更加完美的代码的。

0
相关文章