0

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

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

我有一个子“定时器”,其中启动定时器,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 处理,然后启动计时器。为了克服这个问题,我包含了一个与 AddHandler 方法同名的新函数“onhandler”,它执行相同的过程。

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:01 完成。现在定时器启动 15 分钟,下一组进程在凌晨 2:16 执行,因为定时器设置为 15 分钟间隔。但我需要我的流程在凌晨 2:15 准确运行。换句话说,定时器间隔必须是 14 分钟而不是 15 分钟。

另一个例子是,我在凌晨 3 点启动应用程序,如果它在凌晨 3:03 结束,那么下一次运行的时间间隔必须是 12 分钟而不是 15 分钟。

有什么方法可以根据流程结束时间使每次流程完成时的计时器间隔动态?

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

在此先感谢,马杜。

4

2 回答 2

1

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

    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
于 2013-05-16T20:38:36.150 回答
0

我曾经有过类似的事情。我将有一个名为 NextExecutionTime 的变量,其中包含下一次需要执行该流程的时间。

起初是(例如)凌晨 2 点。

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

于 2013-05-17T14:48:44.783 回答