我的按钮在禁用时响应点击次数。
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秒内,按钮显示为灰色,但如果我再次点击它,则在完成第一次后再次执行操作。
我在这里遗漏了一些东西。如何在操作完成之前阻止按钮允许交互?
答案 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
这确实对我有用......