定时器不起作用

时间:2014-07-27 09:05:52

标签: vb.net timer

我尝试从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

1 个答案:

答案 0 :(得分:3)

除了您发布的代码中的错误外,还有其他设计问题。

阅读此问题:System.Timers.Timer vs System.Threading.Timer

在工作线程(而不是UI线程)上调用回调,因此显示消息框可能是一个大问题。

然后切换到更合适的计时器。如果您想要做的就是每秒验证输入,请切换到System.Windows.Forms.Timer。 tick处理程序在UI线程上运行,因此您可以更改处理程序中的UI。

然后考虑更改间隔,每毫秒弹出一个消息框是不可能的,而且不是用户友好的。

最后,我建议不要使用计时器:只需处理输入字段的更改并响应更改的输入或使用WinForms控件的标准验证事件。这样便宜得多(在CPU上)并且不会弄乱焦点。