Dan*_*ert 30 .net c# scheduled-tasks
我正在开发一个小型网络爬虫,它将在系统托盘中运行,并在一小时内每小时抓取一个网站.
让.NET每小时或某个其他时间间隔提升事件以执行某项任务的最佳方法是什么.例如,我想根据时间每20分钟运行一次事件.该活动将在以下时间举行:
00:20
00:40
01:00
01:20
01:40
Run Code Online (Sandbox Code Playgroud)
等等.我能想到的最好的方法是在线程上创建一个循环,不断检查时间是否可以被给定的时间间隔整除,并在达到时间时引发回调事件.我觉得必须有一个更好的方法.
我会使用a Timer
但是我更喜欢遵循"时间表"的东西,这些时间表按小时或类似的方式运行.
如果没有在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;
}
Run Code Online (Sandbox Code Playgroud)
此代码使用如下:
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);
}
Run Code Online (Sandbox Code Playgroud)
tva*_*son 31
System.Timers.Timer.如果你想在一天的特定时间运行,你需要弄清楚它到下一次的时间长度并将其设置为你的间隔.
这只是基本的想法.根据您需要的精确程度,您可以做更多事情.
int minutes = DateTime.Now.Minute;
int adjust = 10 - (minutes % 10);
timer.Interval = adjust * 60 * 1000;
Run Code Online (Sandbox Code Playgroud)
suh*_*air 11
您可以从Quartz.net http://quartznet.sourceforge.net/找到帮助
归档时间: |
|
查看次数: |
64454 次 |
最近记录: |