【问题标题】:Basic timer error in vbvb中的基本计时器错误
【发布时间】:2015-03-04 16:43:20
【问题描述】:

我使用这个代码:-

    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    If button.Location.Y >= 618 Then
    MessageBox.Show("You lost!", "Failure", MessageBoxButtons.RetryCancel)
    Timer1.Enabled = False
    End If
    End Sub

让我们假设条件始终为真,而不是禁用 timer1,而是无限次显示消息框。但是如果我先写 Timer.enable = false 然后再写消息框,则计时器停止。为什么会发生这种情况

【问题讨论】:

  • 当你显示一个带有show的消息框时,它后面的代码在消息框关闭之前不会执行。 Time1.Enabled = False 只有在消息框关闭后才会执行。
  • “被告”姓名为:Application.DoEvents 相关:What is a message pump?

标签: vb.net timer


【解决方案1】:

因为滴答声以大约异步的方式发射。如果前一个未完成,则可能同时发生多个刻度执行(在您的情况下它没有完成,因为它正在等待 MessageBox 被点击)。这意味着当消息框等待“Ok”时,其他滴答事件正在触发(因为您还没有进入禁用部分)。

您可能希望将 Timer1.Enabled = false 放在 MessageBox 之前,尽管这仍然可能会遇到竞争条件,尽管可能性较小,但您希望对其进行测试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多