2015-01-26 2 views
0

пожалуйста, помогите мне по моей проблеме по таймеру. Я установил свой таймер на 1 мин. (60seconds). Нажав кнопку «Пуск» и «Пауза», она работает хорошо, но после нажатия кнопки «еще раз», чтобы возобновить время, неточно, в какое время я останавливаюсь. Пример: я запускаю свой таймер (1 минута) и останавливаюсь до 40 секунд. После того, как я возобновляю, время не совсем зависит от того, что мое пауза паузы. Вместо 40 секунд он начинается с 30, так как это зависит от того, в какое время я нажму кнопку возобновления. Он так же, как и при работе, даже я останавливаю таймер. Вот мой код.VB.Net Timer Pause/Stop

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

    If alarmTime < Date.Now Then 
     ' Display the new time left 
     ' by updating the Time Left label. 
     Timer2.Stop() 
     MessageBox.Show("Times Up!.", "Thank you!") 
     BtnBack.Enabled = True 
     startButton.Enabled = False 
     BtnSubmit.Enabled = False 
     AnsA.Enabled = False 
     AnsB.Enabled = False 
     AnsC.Enabled = False 
     AnsD.Enabled = False 
     BtnNext.Enabled = False 
     BtnPrev.Enabled = False 
     BtnClose.Enabled = True 
     Categoriess.lnkMathHS.Enabled = False 
    Else 
     Dim remainingtime As TimeSpan '= Me.alarmTime.Subtract(Date.Now) 
     remainingtime = Me.alarmTime.Subtract(Date.Now) 
     timeLabel.Text = String.Format("{0}:{1:d2}:{2:d2}", _ 
     remainingtime.Hours, _ 
     remainingtime.Minutes, _ 
     remainingtime.Seconds) 
    End If 

End Sub 

Private Sub startButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles startButton.Click 

    alarmTime = Date.Now.AddMinutes(TextBox1.Text) 
    Timer2.Start() 

End Sub 


Private Sub resumeButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles resumeButton.Click 

    Timer2.start() 

End Sub 

Private Sub stopButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles stopButton.Click 

    Timer2.stop() 

End Sub 
+0

, пожалуйста, помогите мне. – user2926827

ответ

1

Причина таймер, кажется, продолжает работать, пока он находится в режиме паузы, потому что вы сравниваете alartTime ко времени компьютерной системы. Очевидно, что системное время на компьютере постоянно меняется каждую секунду и не подчиняется паузе. Когда вы возобновляете свой таймер, он по-прежнему сравнивается с текущим временем, которое неизбежно изменилось с момента паузы.

Чтобы решить эту проблему, я бы сохранить копию текущего времени при нажатии на кнопку запуска и сравнить время срабатывания будильника на сэкономленное время старта, которое больше не будет изменять:

Dim alarmTime As DateTime 
Dim startTime As DateTime ' New start time variable to save a copy of the current date/time when the start button is clicked 

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

    alarmTime = alarmTime.AddSeconds(-1) ' subtract 1 second from the alarm time 
    remainingtime = Me.alarmTime.Subtract(startTime) ' get the amount of time between the saved start time and the current alarm time 

    If alarmTime >= startTime Then 
     ' There is still more time left on the alarm so we update the label with the subtracted time 

     timeLabel.Text = String.Format("{0}:{1:d2}:{2:d2}", _ 
     remainingtime.Hours, _ 
     remainingtime.Minutes, _ 
     remainingtime.Seconds) 
    End If 

    If remainingtime.TotalSeconds = 0 Then 
     ' The time has elapsed 

     ' Display the new time left 
     ' by updating the Time Left label. 
     Timer2.Stop() 
     MessageBox.Show("Times Up!.", "Thank you!") 
     BtnBack.Enabled = True 
     startButton.Enabled = False 
     BtnSubmit.Enabled = False 
     AnsA.Enabled = False 
     AnsB.Enabled = False 
     AnsC.Enabled = False 
     AnsD.Enabled = False 
     BtnNext.Enabled = False 
     BtnPrev.Enabled = False 
     BtnClose.Enabled = True 
     Categoriess.lnkMathHS.Enabled = False 
    End If 
End Sub 

Private Sub startButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles startButton.Click 

    Me.Timer2.Interval = 1000 ' Ensure that the timer is ticking once per second 
    startTime = Date.Now ' Save a copy of the current date/time 
    alarmTime = Date.Now.AddMinutes(TextBox1.Text) 
    Timer2.Start() 

End Sub 

Примечание: Необходимо обновлять только события Timer2_Tick и startButton_Click. Вы также должны создать глобальную переменную startTime. Поскольку вы не указали код для того, как вы создали переменную alarmTime, я предположил, что это была переменная datetime, которая была глобальной для вашей формы. Вы можете создать переменную startTime так же, как вы создали alarmTime.

+0

спасибо. теперь его работа. – user2926827