在VB.NET中以特定的秒数执行函数

在VB.NET中以特定的秒数执行函数,vb.net,timer,Vb.net,Timer,我正在使用计时器为我的文件制作一个备份计划程序,当所说的时间等于当前时间时,它就会执行,但我的问题是它会一直执行到1秒过去,就像我使用MsgBox时所做的那样 这是我尝试过的,但它不起作用,它仍然执行,直到1秒过去。请帮我做到这一点。谢谢 Dim d As Date = DateTime.Now Dim d1 As Date = d.AddMilliseconds(1) Dim dw As String = d1 & DateTime.Now.DayOfWeek.ToString Dim

我正在使用
计时器
为我的文件制作一个备份计划程序,当所说的时间等于当前时间时,它就会执行,但我的问题是它会一直执行到1秒过去,就像我使用
MsgBox
时所做的那样

这是我尝试过的,但它不起作用,它仍然执行,直到1秒过去。请帮我做到这一点。谢谢

Dim d As Date = DateTime.Now
Dim d1 As Date = d.AddMilliseconds(1)
Dim dw As String = d1 & DateTime.Now.DayOfWeek.ToString
Dim date2 As Date = cntrl.Value.AddMilliseconds(1)

If Form3.chkWed.Checked = True Then
     If dw = date2 & Form3.chkWed.Text Then
         CopyStart(src, dest)
     End If
End If
If Form3.chkThu.Checked = True Then
      If dw = date2 & Form3.chkThu.Text Then
          MsgBox("P")
      End If
End If

我添加了另一个
计时器
,并执行了类似的操作

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

Dim dw As String = DateTime.Now & DateTime.Now.DayOfWeek.ToString
     If Form3.chkThu.Checked = True Then
        If dw = Form3.DateTimePicker1.Value & Form3.chkThu.Text Then
            Timer2.Enabled = True
        End If
     End If
End Sub

Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick

Timer2.Enabled = False
     MsgBox("P")
End Sub

我所说的是如下所示。在此示例中,有三个
RadioButton
控件,分别指示任务应在下午1:00、下午5:00和晚上9:00启动

Private Sub RadioButton1_CheckedChanged(sender As Object, e As EventArgs) Handles RadioButton1.CheckedChanged
    'The next task is to start at 1.00 PM
    Me.ResetTimerInterval(TimeSpan.FromHours(13))
End Sub

Private Sub RadioButton2_CheckedChanged(sender As Object, e As EventArgs) Handles RadioButton2.CheckedChanged
    'The next task is to start at 5.00 PM
    Me.ResetTimerInterval(TimeSpan.FromHours(17))
End Sub

Private Sub RadioButton3_CheckedChanged(sender As Object, e As EventArgs) Handles RadioButton3.CheckedChanged
    'The next task is to start at 9.00 PM
    Me.ResetTimerInterval(TimeSpan.FromHours(21))
End Sub

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    'The next task will start in 24 hours.
    With Me.Timer1
        .Stop()
        .Interval = Convert.ToInt32(TimeSpan.FromHours(24).TotalMilliseconds)
        .Start()
    End With

    'Start a task right now.
    Me.InitiateTask()
End Sub

Private Sub ResetTimerInterval(nextTaskStartTime As TimeSpan)
    Dim nextTaskStartDateTime = Date.Today + nextTaskStartTime

    If Date.Now > nextTaskStartDateTime Then
        nextTaskStartDateTime.AddDays(1)
    End If

    Dim timeUntilNextTask = nextTaskStartDateTime - Date.Now

    With Me.Timer1
        .Stop()
        .Interval = Convert.ToInt32(timeUntilNextTask.TotalMilliseconds)
        .Start()
    End With
End Sub

Private Sub InitiateTask()
    '...
End Sub

我真的不明白你要什么。你是说任务在指定时间后1秒才开始,你想让它立即开始吗?如果不是,我完全不知道你的意思。任务完全在指定的时间开始,但它一直运行,直到那一秒没有完成,因为它的毫秒,因为我的
DateTimePicker
的值是
H:MM:SS
,我计划让它精确地执行,比如说1.5秒,这样它就不会在1秒到2秒之间继续运行。i、 e.任务从
1:01:5:
开始,然后它仍在运行,直到
1:01:6
,它应该运行一次。那么你是说任务会启动多次,是吗?如果是这种情况,那么它似乎是一个糟糕的实现,因为如果您使用的是计时器,那么当
计时器
引发
勾选
事件时,您应该只启动任务一次。如果您只想启动任务一次,为什么要每秒多次启动
勾号
事件?是的,我需要两个
计时器
s吗?由于我有多个复选框,您能给我一个示例代码吗?
计时器应设置其
间隔
,以便在下次需要启动任务时引发
勾选
事件。无需进行任何检查,因为您知道任务将在出现
勾选时启动。当选中或取消选中任何
复选框
控件时,可以设置
间隔
。此时,您可以计算出距下一个任务的确切时间,并相应地设置
间隔。任务完成后,您可以确定下一个任务的执行时间,并再次相应地设置
间隔。它就像一个闹钟,这是一个错误问题的解决方案。如果你解决了正确的问题,那么你最终会得到一个更好的解决方案。