动态分配定时器间隔

时间:2013-05-16 20:21:05

标签: vb.net timer

我有一个需要在VB.net中使用计时器每15分钟运行一次的功能。

但这里出现的挑战是,如果我启动计时器,比如凌晨2点,实际功能将在凌晨2:15执行,之后每隔15分钟执行相同的功能。

我有一个子“Timer”,其中定时器启动,Addhandler操作员每15分钟调用一次“ONhandler”函数。

private mytimer as timer
private sub Timer()
{
with mytimer
.autoreset=true
.enabled=true
.interval=900000
.start
end with
AddHandler mytimer.elapsed ,assressof onhandler
console.readkey()
}

onhandler(byval source as oblject,byval e as elapsedeventargs)
{
Performs the DB operations.
}

最初,我有一些逻辑可以在每小时的每个00,15,30,45分钟准确启动计时器。假设我在凌晨1:55启动应用程序,逻辑将确保应用程序睡眠直到凌晨2:00和凌晨2:00,计时器将启动 。 15分钟后,即凌晨2:15,该功能将被执行。

但我需要的是,我不希望我的申请从2:00到2:15等待15分钟。相反,它应该在2:00处理,然后启动计时器。为了解决这个问题,我添加了一个新的函数“onhandler”,它具有相同的AddHandler方法,它执行相同的过程。

private sub Timer()
{
onhandler()     ****New function namesd as AddHandler method
with mytimer
.autoreset=true
.enabled=true
.interval=900000
.start
end with
AddHandler mytimer.elapsed ,assressof onhandler
console.readkey()
}

onHandler()
{
Do same DB function
}

实施新逻辑后, 如果我在凌晨1:55启动应用程序,我的应用程序将睡到凌晨2:00,之后sub中的Onhandler()方法将首先执行,它将在2:01Am完成。 现在定时器启动15分钟,下一组过程在凌晨2:16执行,因为定时器设置为15分钟。但我需要我的进程准确地在凌晨2:15运行。换句话说,定时器间隔必须持续14分钟而不是15分钟。

另一个例子是,我在凌晨3点开始申请,如果它在3:03Am结束,则下次运行的时间间隔必须为12分钟而不是15分钟。

根据流程结束时间,有没有办法让每个流程完成的定时器间隔动态???

PS:我是DotNet的新手,过去几天一直在讨论这个问题。伙计们,请帮助我。

提前致谢, 马杜。

2 个答案:

答案 0 :(得分:1)

执行此操作的正确方法是在特定时间运行Windows Task。但是如果你真的想在你的应用程序中写这个,你可以每分钟唤醒程序来检查时间,然后将其添加到被调用的方法中:

    Dim d = DateTime.Now
    if(Not (d.Minute = 0 OrElse d.Minute = 15 OrElse d.Minute = 30 OrElse d.Minute = 45)) Then
        Return 'Quits if the current time is not right
    End If

答案 1 :(得分:0)

我曾经有类似的东西。我将有一个名为NextExecutionTime的变量,它将包含下次需要执行该进程的时间。

起初它将是(例子)凌晨2点。

然后我会每分钟都有一个计时器,如果当前时间等于或大于NextExecutionTime,我会执行该过程并将NextExecutionTime变量设置为下次我希望该进程运行。