一个人的天空

知识就像宇宙,你不知道它到底存在多少奥秘,必须不断的探索
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

在Global中使用线程隔时处理任务

Posted on 2005-11-03 16:28  一个人的天空  阅读(554)  评论(0编辑  收藏  举报

有的时候我们需要隔一段时间做一些处理,可以在Web.Config中使用线程来处理
(书中学习,整理了一下,以下是过5分钟删除一张表的记录
)
using System;
using System.Collections;
using System.ComponentModel;
using System.Web;
using System.Web.SessionState;
using DataBase;
using System.Data.SqlClient;
using System.Web.Security;
using System.IO ;
using System.Threading;
namespace FreightCom
{
 /// <summary>
 /// Global 的摘要说明。
 /// </summary>
 public class Global : System.Web.HttpApplication
 {
  /// <summary>
  /// 必需的设计器变量。
  /// </summary>
  private System.ComponentModel.IContainer components = null;
  private OnLineUser ou=new OnLineUser();
  private UserLoginInfo Login=new UserLoginInfo();
  public Global()
  {
   InitializeComponent();
  } 
  
  protected void Application_Start(Object sender, EventArgs e)
  {
   SchedulerAgent.StartAgent();
  }
 
  protected void Session_Start(Object sender, EventArgs e)
  {
  
  }

  protected void Application_BeginRequest(Object sender, EventArgs e)
  {
   
  }

  protected void Application_EndRequest(Object sender, EventArgs e)
  {

  }

  protected void Application_AuthenticateRequest(Object sender, EventArgs e)
  {
   
  }

  protected void Application_Error(Object sender, EventArgs e)
  {

  }

  protected void Session_End(Object sender, EventArgs e)
  {

  }

  protected void Application_End(Object sender, EventArgs e)
  {
   SchedulerAgent.Stop();
  }
   
  #region Web 窗体设计器生成的代码
  /// <summary>
  /// 设计器支持所需的方法 - 不要使用代码编辑器修改
  /// 此方法的内容。
  /// </summary>
  private void InitializeComponent()
  {   
   this.components = new System.ComponentModel.Container();
  }
  #endregion
 }

 public interface ISchedulerJob
 {
  void Execute();
 }

 public class SchedulerConfiguration
 {
  private int sleepInterval;
  private ArrayList jobs=new ArrayList();
  public int SleepInterval
  {
   get{return sleepInterval;}
  }
  public ArrayList Jobs
  {
   get {return jobs;}
  }
  public SchedulerConfiguration(int newSleepInterval)
  {
   sleepInterval=newSleepInterval;
  }
 }
 
 public class Scheduler
 {
  private SchedulerConfiguration configuration = null;
  public Scheduler(SchedulerConfiguration config)
  {
   configuration=config;
  }
  public void Start()
  {
   while(true)
   {
    try
    {
     foreach(ISchedulerJob job in configuration .Jobs)
     {
      job.Execute();
     }
    
    }
    catch{}
    finally
    {
     Thread.Sleep(configuration.SleepInterval);
    }
   }
  }
 }
 public class SchedulerAgent
 {
  private static System.Threading.Thread schedulerThread=null;
  public static void StartAgent()
  {
   SchedulerConfiguration config=new SchedulerConfiguration(1000*300);//设置时间,此处为5分钟
   config.Jobs.Add(new AlertJob());
   Scheduler scheduler=new Scheduler(config);
   System.Threading.ThreadStart myThreadStart=new System.Threading.ThreadStart(scheduler.Start);
   schedulerThread=new System.Threading.Thread(myThreadStart);
   schedulerThread.Start();
  }
  public static void Stop()
  {
   if(null!=schedulerThread)
   {
    schedulerThread.Abort();
   }
  }
 }

 public class AlertJob:ISchedulerJob
 {
  private OnLineUser ou=new OnLineUser();
  public void Execute()
  {
   ou.UserDelOnline();//一个删除的方法
  }
 }
}