我的按钮在禁用时会对点击做出响应。
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秒内,按钮呈灰色,但如果我再次单击它,则在完成第一次操作后,它会再次执行操作。
我遗漏了一些东西。如何防止按钮在操作完成之前允许交互?
发布于 2015-03-26 02:02:03
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这应该会防止双击
发布于 2015-03-26 05:07:24
使用VS2012,异步工作非常容易使用(与以前的版本相比...)。
问题是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这对我来说很管用。

https://stackoverflow.com/questions/29262854
复制相似问题