当前位置:  开发笔记 > 编程语言 > 正文

如何在.NET中每小时(或每小时的特定时间间隔)引发事件?

如何解决《如何在.NET中每小时(或每小时的特定时间间隔)引发事件?》经验,为你挑选了2个好方法。

我正在开发一个小型网络爬虫,它将在系统托盘中运行,并在一小时内每小时抓取一个网站.

让.NET每小时或某个其他时间间隔提升事件以执行某项任务的最佳方法是什么.例如,我想根据时间每20分钟运行一次事件.该活动将在以下时间举行:

00:20
00:40
01:00
01:20
01:40

等等.我能想到的最好的方法是在线程上创建一个循环,不断检查时间是否可以被给定的时间间隔整除,并在达到时间时引发回调事件.我觉得必须有一个更好的方法.

我会使用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;
}

此代码使用如下:

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);
}

tvanfosson.. 31

System.Timers.Timer.如果你想在一天的特定时间运行,你需要弄清楚它到下一次的时间长度并将其设置为你的间隔.

这只是基本的想法.根据您需要的精确程度,您可以做更多事情.

int minutes = DateTime.Now.Minute;
int adjust = 10 - (minutes % 10);
timer.Interval = adjust * 60 * 1000;  

同意 - 定时器是要走的路."检查循环"只是说"民意调查"和民意调查的另一种方式.使用计时器是你最好的选择. (4认同)


suhair.. 11

您可以从Quartz.net http://quartznet.sourceforge.net/找到帮助



1> tvanfosson..:

System.Timers.Timer.如果你想在一天的特定时间运行,你需要弄清楚它到下一次的时间长度并将其设置为你的间隔.

这只是基本的想法.根据您需要的精确程度,您可以做更多事情.

int minutes = DateTime.Now.Minute;
int adjust = 10 - (minutes % 10);
timer.Interval = adjust * 60 * 1000;  


同意 - 定时器是要走的路."检查循环"只是说"民意调查"和民意调查的另一种方式.使用计时器是你最好的选择.

2> suhair..:

您可以从Quartz.net http://quartznet.sourceforge.net/找到帮助


即使使用小型应用程序,Quartz也非常灵活,并且在代码行方面增加了很少的开销.这是用于初始化和调度定时作业的六行代码.
推荐阅读
wangtao
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有