Vb.net按钮仍允许在禁用时单击

时间:2015-03-25 17:45:49

标签: vb.net button

我的按钮在禁用时响应点击次数。

Private Sub btnGenerate_Click(sender As Object, e As EventArgs) Handles btnGenerate.Click
        btnGenerate.Enabled = False
        Me.Cursor = Cursors.WaitCursor

        'Do a bunch of operations

        Me.Cursor = Cursors.Default
        btnGenerate.Enabled = True
    End Sub

处理我在后台做的事情大约需要5-10秒。在5-10秒内,按钮显示为灰色,但如果我再次点击它,则在完成第一次后再次执行操作。

我在这里遗漏了一些东西。如何在操作完成之前阻止按钮允许交互?

2 个答案:

答案 0 :(得分:0)

Dim Working as boolean=false

Private Sub btnGenerate_Click(sender As Object, e As EventArgs) Handles btnGenerate.Click
    if Working=true then exit sub

    ' Your Work Process
    Work()
End Sub

sub Work()
   Working=True

   ' Work code

   Working=False
end sub

这样可以防止双击

答案 1 :(得分:0)

使用VS2012,Async Work非常易于使用(与之前的版本相比......)。

问题是UI线程没有放手。没有看到实际发生的“工作”,我无法解释原因。我希望没有任何重新启用按钮...

但是,Async将允许释放UI线程,而enabled = false应该生效。尝试这样的事情:

Private Async Sub btnGenerate_Click(sender As Object, e As EventArgs) Handles btnGenerate.Click
    btnGenerate.Enabled = False
    Dim t As New Task(Sub() MyWorkLoad())
    t.Start()
    Await t
    btnGenerate.Enabled = True
End Sub

Private Sub MyWorkLoad()
   'do your work here

   'for testing
    Dim time As Date = Now
    Do While True
        If DateAdd(DateInterval.Second, -5, Now) > time Then Exit Do
    Loop

End Sub

这确实对我有用...... This did work for me