在VB.NET中如何在系统时钟一分钟结束时调用函数

在VB.NET中如何在系统时钟一分钟结束时调用函数,.net,vb.net,timer,.net,Vb.net,Timer,我有一个用VB.Net编写的代码,可以在多个系统上运行。该代码的一个功能是每分钟检查某个文件夹中的文件。如果我们在不同的时间在不同的系统上运行代码,计时器可能会在每个系统上的不同时间执行该功能来检查文件。有没有办法使每个系统中运行的计时器彼此同步,这样每个系统上的计时器何时启动就无关紧要了,它们都会同时检查文件如果我正确理解您的问题,您希望每分钟调用一个函数,但要使其与系统时钟同步。这并不完全是直截了当的。我会告诉你我的方法,我们会从那里开始 类是以X间隔执行给定函数的好方法。问题在于,您希望根

我有一个用VB.Net编写的代码,可以在多个系统上运行。该代码的一个功能是每分钟检查某个文件夹中的文件。如果我们在不同的时间在不同的系统上运行代码,计时器可能会在每个系统上的不同时间执行该功能来检查文件。有没有办法使每个系统中运行的计时器彼此同步,这样每个系统上的计时器何时启动就无关紧要了,它们都会同时检查文件

如果我正确理解您的问题,您希望每分钟调用一个函数,但要使其与系统时钟同步。这并不完全是直截了当的。我会告诉你我的方法,我们会从那里开始

类是以X间隔执行给定函数的好方法。问题在于,您希望根据系统时钟,在一分钟过去时保持同步。因此,我们需要确保我们只在时钟经过一分钟时启动计时器。这里有一些方法

让计时器每秒钟启动一次;但是,在我们让它做任何事情之前,我们要检查一下,看一分钟是否已经按照时钟过去了。若有,;然后我们让它继续。看起来是这样的:

Module TimerExample

    Private _previousTime As DateTime = DateTime.Now

    Sub Main()
        Dim timer As New System.Timers.Timer(1000)
        AddHandler timer.Elapsed, AddressOf TimeElapsed
        timer.Start()
        'Run a loop so the console application doesn't quit
        Application.Run()
    End Sub

    Sub TimeElapsed(sender As Object, args As ElapsedEventArgs)
        Dim now As DateTime = DateTime.Now
        If now.Minute > _previousTime.Minute Then
            'A minute elapsed. Do your code here
            Console.WriteLine("A minute elapsed!")
        End If
        _previousTime = now
    End Sub

End Module
这可能是您可以接受的解决方案。唯一的缺点是计时器每秒都会启动;但直到一分钟过去,它才做任何事情

另一种选择可能是使用两个计时器。以与第一示例类似的方式使用第一定时器;但是用它来启动另一个每分钟只经过一次的计时器。启动第二个计时器后,让第一个计时器停止。这种方法唯一的优点是计时器每分钟只启动一次。消极的是,计时器可能会在很长一段时间内从系统时钟开始漂移。第一个例子是更好的方法;但是,如果让计时器每秒钟启动一次太贵了,那么这是一个选择,尽管我真的怀疑它是否会这样


另一件你可能想处理的事情;也许不是;是用户更改系统时间的时间。你可以花时间去了解什么时候会发生这种情况。

表现出尊重并纠正问题中的错误。这是一个很好的例子来说明:如何根据系统时钟在一分钟后调用函数?我不认为这与使用计时器每分钟调用某个函数完全相同。他想根据系统时钟每分钟调用一个函数。因此,当系统时间更改为10:00到10:01时,会调用一些东西。这与上次打电话后每过一分钟都打电话不同。很接近。谢谢你的详细回答……如果我们每秒启动计时器,会对性能有很大影响吗?@sachin如果它每秒钟所做的只是检查它是否应该做某事,但每分钟只做那件事;那么对性能的影响将是微乎其微的。