我的印象是 System.Timers.Timer 创建了自己的线程,并且 Microsoft 建议使用这种类型的计时器来执行更准确计时的任务(与在 UI 线程中运行的 Windows.Forms.Timer 相对)。
下面的代码(我认为)应该可以复制并粘贴到具有空表单的项目中。在我的机器上,我无法让 tmrWork 以每秒 60 次以上的速度滴答作响,而且它非常不稳定。
Public Class Form1
Private lblRate As New Windows.Forms.Label
Private WithEvents tmrUI As New Windows.Forms.Timer
Private WithEvents tmrWork As New System.Timers.Timer
Public Sub New()
Me.Controls.Add(lblRate)
InitializeComponent()
End Sub
Private StartTime As DateTime = DateTime.Now
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) _
Handles MyBase.Load
tmrUI.Interval = 100
tmrUI.Enabled = True
tmrWork.Interval = 1
tmrWork.Enabled = True
End Sub
Private Counter As Integer = 0
Private Sub tmrUI_Tick(sender As Object, e As System.EventArgs) _
Handles tmrUI.Tick
Dim Secs As Integer = (DateTime.Now - StartTime).TotalSeconds
If Secs > 0 Then lblRate.Text = (Counter / Secs).ToString("#,##0.0")
End Sub
Private Sub tmrWork_Elapsed(sender As Object, e As System.Timers.ElapsedEventArgs) _
Handles tmrWork.Elapsed
Counter += 1
End Sub
End Class
在这个特殊的简单案例中,将所有内容都放入 tmrUI 将产生相同的性能。我想我从来没有尝试过让 System.Timers.Timer 跑得太快,但这种性能对我来说太糟糕了。我编写了自己的类以在硬件中使用高性能计时器,但似乎应该有一个内置的计时器可以做到,比如每秒 100 个滴答声?
这里发生了什么?