1/1页1 跳转到查看:759
发新话题 回复该主题

如何让程序按一个周期定期运行

如何让程序按一个周期定期运行

各位大虾,偶编写了一个蜘蛛程序,抓取别人的数据,本来设计是当对方数据一更新我的蜘蛛就马上会去爬一遍,后来发现这样不行,因为对方是动态页面,偶用response.LastModified得到的都是now,如果是静态页面就可以实现,所以我设计了按照一定频率去抓取该网站信息,请问应该用什么方法实现?

TOP

 

哪位大虾帮帮忙哦,小弟将不胜感激!

TOP

 

回复 1# fengyangchao 的帖子

Ajax 里面有个Timer 可以设置程序在一定时间内运行,ASP.NET AJAX所提供的 Timer 控件是一个服务器控件,它能够定时引发全网页回传,在搭配了 UpdatePanel 控件之后,就可以定时引发异步回传并局部更新 UpdatePanel 控件的内容

TOP

 

.net中也有timer类的,看看这个帖子
.net计时器控件简介

TOP

 

多谢楼上两位大虾,偶看了一下感觉思路应该是这样的,有没有例子让偶参考一下?

TOP

 

回复 5# fengyangchao 的帖子

新建一个(VB.NET/C#)项目,选择Windows Service应用..然后在OnStart类里就可以添加代码了.

  如果想实现定时运行,活实时监听的功能,可以用.NET 提供的TIMER类.

  以下是代码片段.

        private void theTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
  {

  if (!ExCondition())

  { return;

  }

  try

  {

  theTimer.Enabled = false;

  MyTransaction();

  }

  catch(Exception es)

  {

  WriteLog(es.Message);

  }

  theTimer.Enabled = true;

  }

  //检测执行条件

  private bool ExCondition()

  {

  DateTime dtNow = DateTime.Now;

  if(this.currentmode.Equals("auto"))

  {

  string[] frev = this.freqvalue.Split('-');

  switch( this.freq)

  {

  case "2"://2-每小时

  if( (dtNow.Minute == 59)&(dtNow.Second< 30))

  {

  return true;

  }

  break;

  case "4"://4-每天,

  if((dtNow.Hour == int.Parse(frev[1]))&(dtNow.Minute == int.Parse(frev[2]))&(dtNow.Second<30))

  {

  return true;

  }

  break;

  case "8"://8-每周,

  int we = int.Parse(frev[0].Substring(1,1));

  if((dtNow.DayOfWeek.ToString().Equals(Week[we]))&(dtNow.Hour == int.Parse(frev[1]))&(dtNow.Minute == int.Parse(frev[2]))&(dtNow.Second<30))

  {

  return true;

  }

  break;

  case "16"://16-每月,

  int mm = int.Parse(frev[0].Substring(1,frev[0].Length-1));

  if((dtNow.Day == mm)&(dtNow.Hour == int.Parse(frev[1]))&(dtNow.Minute == int.Parse(frev[2]))&(dtNow.Second<30))

  {

  return true;

  }

  break;

  default://无触发

  return true;

  break;

  }

  }

  else

  {

  switch(this.startpoint)

  {

  case "0":

  return true;

  break;

  default:

  string[] st = startpoint.Split('-');

  if((dtNow.Hour == int.Parse(st[0]))&(dtNow.Minute ==int.Parse(st[1]))&(dtNow.Second<30))

  {

  return true;

  }

  break;

  }

  }

  return false;

  }

  注册你的Windows Service程序.

  用InstallUtil IASserver.exe (这个文件默认在C:\WINNT\Microsoft.NET\Framework\v1.1.4322下)

  InstallUtil IASserver.exe

  InstallUtil IASserver.exe /u (卸载)
本帖被评分 1 次

TOP

 

纯属支持

纯属支持

TOP

 

private void theTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
  {

  if (!ExCondition())

  { return;

  }

  try

  {

  theTimer.Enabled = false;

  MyTransaction();

  }

  catch(Exception es)

  {

  WriteLog(es.Message);

  }

  theTimer.Enabled = true;

  }

TOP

 

多谢各位大侠,theTimer是System.Timer,Timer还是System.Threading,Timer啊?

TOP

 

看看这个帖子:.NET中的定时器(转)

TOP

 
1/1页1 跳转到
发表新主题 回复该主题