VB毫秒计时器,实现暂停后还能从停止时间继续开始计时
时间: 2024-03-13 17:44:44 浏览: 22
要实现暂停后还能从停止时间继续开始计时,可以在程序中记录下暂停时的时间点,然后在恢复计时时重新计算时间间隔。
具体实现步骤如下:
1. 在窗体中添加一个 `Timer` 控件。
2. 设置 `Timer` 控件的 `Interval` 属性为所需的毫秒数,例如设置为 1000 表示每秒触发一次。
3. 在窗体中定义一个变量 `elapsedMilliseconds` 表示已经过去的毫秒数。
4. 在 `Timer` 的 `Tick` 事件中编写需要执行的代码,例如更新窗体显示的时间。
5. 在窗体中添加两个按钮,一个用于开始计时,另一个用于暂停计时。
6. 在开始计时的按钮点击事件中启动计时器,并将 `elapsedMilliseconds` 设置为 0。
7. 在暂停计时的按钮点击事件中记录下当前时间,停止计时器,并计算出已经过去的毫秒数 `elapsedMilliseconds`。
8. 在恢复计时的按钮点击事件中记录下当前时间,计算出暂停期间已经过去的毫秒数,再将 `elapsedMilliseconds` 设置为该值,并重新启动计时器。
下面是一个示例代码,实现每 500 毫秒更新一次窗体标题,点击开始按钮开始计时,点击暂停按钮暂停计时并记录下时间,点击恢复按钮从暂停时间继续计时:
```vb
Public Class Form1
Dim elapsedMilliseconds As Integer = 0 '已经过去的毫秒数
Dim pauseTime As DateTime '暂停时的时间点
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
'计算总共经过的毫秒数
Dim totalMilliseconds As Integer = elapsedMilliseconds + (DateTime.Now - pauseTime).TotalMilliseconds
'更新窗体标题显示的时间
Me.Text = TimeSpan.FromMilliseconds(totalMilliseconds).ToString("hh\:mm\:ss\.fff")
End Sub
Private Sub btnStart_Click(sender As Object, e As EventArgs) Handles btnStart.Click
elapsedMilliseconds = 0
Timer1.Start()
End Sub
Private Sub btnPause_Click(sender As Object, e As EventArgs) Handles btnPause.Click
pauseTime = DateTime.Now
Timer1.Stop()
elapsedMilliseconds += (pauseTime - Timer1.Interval).TotalMilliseconds '计算已经过去的毫秒数
End Sub
Private Sub btnResume_Click(sender As Object, e As EventArgs) Handles btnResume.Click
Dim resumeTime As DateTime = DateTime.Now
elapsedMilliseconds += (resumeTime - pauseTime).TotalMilliseconds '计算已经过去的毫秒数
Timer1.Start()
End Sub
End Class
```
在窗体加载时,可以先将计时器停止,避免在程序启动时就开始计时:
```vb
Public Class Form1
Dim elapsedMilliseconds As Integer = 0 '已经过去的毫秒数
Dim pauseTime As DateTime '暂停时的时间点
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Timer1.Stop()
End Sub
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
'计算总共经过的毫秒数
Dim totalMilliseconds As Integer = elapsedMilliseconds + (DateTime.Now - pauseTime).TotalMilliseconds
'更新窗体标题显示的时间
Me.Text = TimeSpan.FromMilliseconds(totalMilliseconds).ToString("hh\:mm\:ss\.fff")
End Sub
Private Sub btnStart_Click(sender As Object, e As EventArgs) Handles btnStart.Click
elapsedMilliseconds = 0
Timer1.Start()
End Sub
Private Sub btnPause_Click(sender As Object, e As EventArgs) Handles btnPause.Click
pauseTime = DateTime.Now
Timer1.Stop()
elapsedMilliseconds += (pauseTime - Timer1.Interval).TotalMilliseconds '计算已经过去的毫秒数
End Sub
Private Sub btnResume_Click(sender As Object, e As EventArgs) Handles btnResume.Click
Dim resumeTime As DateTime = DateTime.Now
elapsedMilliseconds += (resumeTime - pauseTime).TotalMilliseconds '计算已经过去的毫秒数
Timer1.Start()
End Sub
End Class
```
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)