2014-12-06 84 views
2

基于此SO帖子(https://stackoverflow.com/questions/1329900/net-event-every-minute-on-the-minute-is-a-timer-the-best-option)是否有可能创建一个计时器事件,该事件每30秒触发一次,但根据系统时钟在15秒开始启动?需要每隔30秒触发一次计时器与系统时钟同步

所以00:15,00:45,01:15,01:45,等

UPDATE

更具体地讲,我想启用同步到Windows中的计时器系统时钟。每15秒钟,我想运行一些代码,然后在每45秒我想再次运行代码。根据系统时间,我需要这个事件在准确的15秒和45秒时触发,而不是从计时器开始的每隔30秒开始。

因此,如果我在12:30:47启动计时器,我希望计时器在12:31:15开始,并在12:31:45再次开始,等等。

+0

我该如何为此投票?我认为这个问题很明显? – Riples 2014-12-07 02:06:49

+0

我很清楚,拉霍斯阿帕德当然明白这足以提供一个很好的答案。 – xpda 2014-12-07 02:40:18

回答

1

制作一个计时器并将间隔设置为1000“1秒”。
然后将一个昏暗的isec作为整数。
这将用于检查系统时间“秒”。

然后做一个if语句并检查isec是15还是45。

Dim isec As Integer = 0 
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick 
isec = DateTime.Now.Second 

If isec = 15 Or isec = 45 Then 
'Your code 
End If 

End Sub 
+0

这个定时器如何与系统时钟对齐,以便在刚刚过去的15秒后启动? – Riples 2014-12-07 02:17:06

+0

@Riples这就是我的代码正在做的事情。 DateTime.Now.Second是系统时间“,所以用我的代码检查系统时间秒和15或45时,如果统计将运行代码” – Creator 2014-12-07 02:56:18

+0

Thankyou - 你的例子给了我正是我需要的。 – Riples 2014-12-12 03:31:49

2

如何:

Dim startin as Integer = 15 - DateTime.Now.Second 
If (startin < 0) Then 
    startin = startin + 50 
End If 
Dim t as System.Threading.Timer = new System.Threading.Timer(AddressOf tick, _ 
    Nothing, startin * 1000, 30000) 

Sub tick(ByVal status As Object) 
Console.WriteLine(Now) ' or MsgBox(Now) 
End Sub 

我的Visual Basic是很生疏的,所以如果我做了错别字,请让我知道。

相关问题