日期:2014-05-18  浏览次数:20926 次

ASP.NET中实现程序自动运行
ASP.NET中我在Application_Start中使用Timer计算器实现程序定时运行,详细代码如下:

Global.asax: 
  void Application_Start(object sender, EventArgs e) 
  {
  //在应用程序启动时运行的代码
   
  //创建一个计时器,单位:毫秒  
  System.Timers.Timer aTimer = new System.Timers.Timer();  

  //将 Fresher 指定为计时器的 Elapsed 事件处理程序
   
  aTimer.Elapsed += new System.Timers.ElapsedEventHandler(Fresher);

  // AutoReset 属性为 true 时,每隔指定时间循环一次;  
  // 如果为 false,则只执行一次。  
  aTimer.Interval = 300000;
  aTimer.AutoReset = true;
  aTimer.Enabled = true;
  }

  void Fresher(object sender, ElapsedEventArgs e)
  {
  //先给 Application["TimeStamp"] 指定一个初值  
  this.Application.Lock();
  this.Application["TimeStart"] = DateTime.Now.ToString();
  this.Application.UnLock();

  CollectData cd = new CollectData();
  cd.ExceCD();

  this.Application.Lock();
  this.Application["TimeEnd"] = DateTime.Now.ToString();
  this.Application.UnLock();

  }

view.aspx.cs:

  protected void Page_Load(object sender, EventArgs e)
  {
  Response.Write("开始更新数据时间:" + this.Application["TimeStart"].ToString()); 
  Response.Write("<br>结束更新数据时间:" + this.Application["TimeEnd"].ToString());
  Response.Write("<br>--------------------------");
  Response.Write("<br>" + (new CollectData()).PageStr);
  }

view.aspx运行显示结果如下:

开始更新数据时间:2008-7-28 14:41:48
结束更新数据时间:2008-7-28 14:40:46
--------------------------


觉得很奇怪的是其结束时间竟早于开始时间,不知道什么原因!
小弟初学ASP.NET,请各位前辈指点一二!

------解决方案--------------------
楼主的有没有这种可能
你执行view.aspx的时候,Fresher()刚好执行在 cd.ExceCD(); 这句
Fresher()还没来得及给["TimeEnd"]赋新值,还是上一次的执行的Fresher()所赋的值
如果你这个cd.ExceCD(); 需要相当长的时间才能执行完,那就极有可能