【问题标题】:Dynamically assigning the timer interval动态分配定时器间隔
【发布时间】:2013-05-11 21:29:52
【问题描述】:

我有一个函数需要使用 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 处理,然后启动计时器。为了克服这个问题,我添加了一个新的函数“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:01 完成。 现在定时器启动 15 分钟,下一组进程在凌晨 2:16 执行,因为定时器设置为 15 分钟间隔。但我需要我的进程在凌晨 2:15 准确运行。换句话说,定时器间隔必须是 14 分钟而不是 15 分钟。

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

有没有办法根据进程结束时间使每次进程完成时的定时器间隔动态???

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

提前致谢, 马杜。

【问题讨论】:

  • 您在使用所有这些花括号且没有 End Sub 的 VB.net 多么奇怪,...?

标签: vb.net timer


【解决方案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

【讨论】:

  • 场景:我有一个代码 sn-p 需要准确地每 15 分钟触发一次。如果 sn-p 需要 14 分钟完成,那么下一次触发必须在 1 分钟内发生,如果 sn-p 需要 12 分钟完成,那么下一次触发必须在 3 分钟内发生,依此类推。 . . .我如何在 DotNet 中实现这一点?
  • 我不得不从无法进行剪切复制过去的地方输入整个代码。因此格式化它的问题。如果您在解决我的问题时需要更多细节,请告诉我。这样我就可以向您提供所需的详细信息。提前致谢。
  • @MadhuSharan 将您的计时器更改为每 60 秒运行一次,并添加我在被调用函数开头编写的代码。它应该工作
  • 假设我在凌晨 2:00 启动我的应用程序,然后,在以 60 秒的间隔启动我的应用程序时,它最初会等待 60 秒,然后它会执行你的 sn-p。如果满足第 15 分钟的条件,它将继续执行我的 sn-p。但我不希望它等待 60 秒。因为整个应用程序对时间非常敏感,甚至只有 1/10 秒。希望你能解决问题。我希望应用程序在触摸第 15 分钟的任何时间后立即启动,然后在接下来的 15 分钟 SHARP 重新启动。提前致谢。
  • @MadhuSharan 然后运行 ​​Windows 任务。安排它在这些时间运行。
【解决方案2】:

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

一开始应该是(例如)凌晨 2 点。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-09
    • 2012-03-01
    • 1970-01-01
    • 2017-05-08
    • 2016-03-06
    • 1970-01-01
    相关资源
    最近更新 更多