2013-05-16 65 views
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 AM和2:00 AM,该计时器将开始。 15分钟后,即2:15 AM,该功能将被执行。

但我需要的是,我不希望我的申请从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 
} 

实施新的逻辑, 如果我在上午01点55开始申请后,我的应用程序会一直睡到上午02点之后,Onhandler()内的子方法会执行第一,它会在2:01Am完成。 现在定时器启动15分钟,下一组过程在2:16 AM执行,因为定时器设置为15分钟的时间间隔。但我需要我的流程在凌晨2:15运行。换句话说,定时器间隔必须为14分钟而不是15分钟。

另一个例子是,我在上午03时启动该应用程序,并且如果它在3终止:上午03点,那么时间必须有12分钟的间隔,而不是15分钟,为下一次运行。

是否有任何方法可以使定时器间隔动态为每个过程完成基于过程结束时间?

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

在此先感谢, 马杜。

+2

一个奇怪的VB.net你使用所有那些花括号和没有End Sub,...? – IvanH

回答

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 
+0

情景:我有一段代码片段需要每隔15分钟准确触发一次。如果片段需要14分钟才能完成,那么下一个触发器必须在1分钟内完成,如果片段需要12分钟才能完成,则下一个触发器必须在3分钟内完成,依此类推。 。 。 。我如何在DotNet中实现这一点? –

+0

我不得不从一个地方输入整个代码,我无法做一个剪切复制过去。因此格式化它的问题。如果您在解决问题时需要更多详细信息,请告诉我。所以我可以为你提供所需的细节。提前致谢。 –

+0

@MadhuSharan将您的计时器更改为每60秒运行一次并添加我在被调用函数开头写入的代码。它应该工作 – nmat

0

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

起初它会是(示例)2am。

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