我正在开发一个小型网络爬虫,它将在系统托盘中运行并每小时整点爬取一个网站。
让 .NET 每小时或其他间隔引发事件以执行某些任务的最佳方法是什么。例如,我想根据时间每 20 分钟运行一次活动。该活动将在以下地点提出:
00:20
00:40
01:00
01:20
01:40
等等。我能想到的最好方法是在线程上创建一个循环,不断检查时间是否可以被给定的时间间隔整除,如果达到时间则引发回调事件。我觉得必须有更好的方法。
我会使用 aTimer
但我更喜欢遵循按小时运行的“时间表”或类似的东西。
如果没有在 Windows 任务计划程序中设置我的应用程序,这可能吗?
更新:
我正在添加我的算法来计算计时器的时间间隔。此方法采用“ minute
”参数,即计时器应触发滴答的时间。例如,如果 " minute
" 参数为 20,则计时器将按上面时间表中的间隔计时。
int CalculateTimerInterval(int minute)
{
if (minute <= 0)
minute = 60;
DateTime now = DateTime.Now;
DateTime future = now.AddMinutes((minute - (now.Minute % minute))).AddSeconds(now.Second * -1).AddMilliseconds(now.Millisecond * -1);
TimeSpan interval = future - now;
return (int)interval.TotalMilliseconds;
}
这段代码的使用如下:
static System.Windows.Forms.Timer t;
const int CHECK_INTERVAL = 20;
static void Main()
{
t = new System.Windows.Forms.Timer();
t.Interval = CalculateTimerInterval(CHECK_INTERVAL);
t.Tick += new EventHandler(t_Tick);
t.Start();
}
static void t_Tick(object sender, EventArgs e)
{
t.Interval = CalculateTimerInterval(CHECK_INTERVAL);
}