您的位置:首页 > 其它

在B/S系统中引入定时器的功能

2006-03-05 19:49 239 查看
过去的一些使用ASP技术开发的B/S系统中,需要系统定时执行一些方法时一直都找不到好的解决方案(如果有,那一定是我浅薄了,我们讨论讨论。)。现在在ASP。NET中可以使用自定义实现IHttpModule接口的类来加载一个定时器。

public class OilIHttpModule : IHttpModule 
{ 
 public static Timer analyseTimer;//分析数据的定时器
 static int intLastTrialInfo_id;//最后分析的ID 
 static long intAnalyseInterval= 10000;//间隔的时间 
 public OilIHttpModule() 
 { } 
 public String ModuleName 
 { 
  get { return "OilModule"; } 
 } 
 ///初始化模型 
 public void Init(HttpApplication application) 
 { 
  application.BeginRequest += (new EventHandler(this.Application_BeginRequest));//增加处理请求时触发的事件
  if(intLastTrialInfo_id==0) 
  { //获取最后分析的
   trialInfo_id intLastTrialInfo_id = globalMethod.getLastAnalyseTrialInfo_id(); 
  } 
  //判断Timer是否存在,如果没有则实例化 
  if(analyseTimer==null) 
   analyseTimer = new Timer(new TimerCallback(analyseData),null,intAnalyseInterval,intAnalyseInterval); 
 }

private void Application_BeginRequest(Object source, EventArgs e) 
 { 
  //null 
  // HttpApplication application = (HttpApplication)source; 
  // application.Response.Write(intLastTrialInfo_id.ToString()); 
 } 
 ///要定时执行的程序片段 
 private void analyseData(object obj) 
 { 
  ///很重要,可以防止定时器被重新生成 
  analyseTimer.Change( System.Threading.Timeout.Infinite, intAnalyseInterval );
  // StatsInterval 
  int intTrialInfo_idAfterUpdate; 
  intTrialInfo_idAfterUpdate = globalMethod.AnalyseTrialFromTrialInfo_id(intLastTrialInfo_id); 
  if(intTrialInfo_idAfterUpdate > intLastTrialInfo_id) 
  { 
   intLastTrialInfo_id = intTrialInfo_idAfterUpdate; 
  } 
 }
 public void Dispose() 
 {
  analyseTimer = null;

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