2016-03-17 3 views
-2

Я делаю резервный планировщик своих файлов, используя Timer, и он выполняется, когда указанное время равно текущему времени. Но моя проблема заключается в том, что он продолжает выполнение до 1 секунды прошло как то, что я делаю, когда использую MsgBox.Выполнение функции в определенной секунде в VB.NET

Это то, что я пробовал, и он не работает, он все еще выполняется до тех пор, пока не пройдет 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 
+0

Я не совсем понимаю, о чем вы просите. Вы говорите, что задача не начинается до 1 секунды после указанного времени, и вы хотите, чтобы она начиналась немедленно? Если нет, я понятия не имею, что вы имеете в виду. – jmcilhinney

+0

Задача начинается точно в указанное время, но она продолжает работать до тех пор, пока эта секунда не будет завершена из-за ее milisecond, потому что мое значение DateTimePicker 'H: MM: SS', я планирую выполнить его ровно скажем, 1,5 с, поэтому ** NOT ** будет работать от 1сек - 2 сек. то есть задача начинается с '1: 01: 5:', то она все еще работает до '1: 01: 6', она должна выполняться один раз. – Dhan

+1

Значит, вы говорите, что задача начинается несколько раз, да? Если это так, то это будет плохой реализацией, потому что если вы используете таймер, тогда вы должны просто запустить задачу один раз, когда «Таймер» вызывает событие «Tick». Почему вы поднимаете событие «Tick» несколько раз в секунду, если хотите только один раз запустить задачу? – jmcilhinney

ответ

1

Что я говорю о чем-то вроде следующего. В этом примере есть три элемента управления RadioButton, которые указывают, что задача должна быть начата в 1.00 PM, 5.00 PM и 9.00 PM соответственно.

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 
0

Я добавил еще Timer, и сделал что-то вроде этого.

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

Это решение неправильной проблемы. Если бы вы работали над правильной проблемой, вы бы получили лучшее решение. – jmcilhinney