我尝试从winform应用程序运行一个计时器。由于某种原因,应该在计时器的勾号(IsTimeOffsetValid
)上运行的函数在断点处不会被调用也不会停止,并且基本上没有任何反应。我在下面附上了一个代码示例。
我很感激帮助。
Module Module1
Sub main()
Dim OutputForm As New Form17
Application.Run(OutputForm)
End Sub
End Module
Public Class Form17
Private TimerServerOffset As New System.Timers.Timer
Private Sub Form17_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
AddHandler TimerServerOffset.Elapsed, New System.Timers.ElapsedEventHandler(AddressOf IsTimeOffsetValid)
TimerServerOffset.Interval = 1
TimerServerOffset.Start()
End Sub
Private Sub IsTimeOffsetValid()
MsgBox("IsTimeOffsetValid")
End Sub
End Class
答案 0 :(得分:3)
除了您发布的代码中的错误外,还有其他设计问题。
阅读此问题:System.Timers.Timer vs System.Threading.Timer
在工作线程(而不是UI线程)上调用回调,因此显示消息框可能是一个大问题。
然后切换到更合适的计时器。如果您想要做的就是每秒验证输入,请切换到System.Windows.Forms.Timer。 tick处理程序在UI线程上运行,因此您可以更改处理程序中的UI。
然后考虑更改间隔,每毫秒弹出一个消息框是不可能的,而且不是用户友好的。
最后,我建议不要使用计时器:只需处理输入字段的更改并响应更改的输入或使用WinForms控件的标准验证事件。这样便宜得多(在CPU上)并且不会弄乱焦点。