首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >禁用时,Vb.net按钮仍允许单击

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

Stack Overflow用户
提问于 2015-03-26 01:45:49
回答 2查看 1K关注 0票数 0

我的按钮在禁用时会对点击做出响应。

代码语言:javascript
复制
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秒内,按钮呈灰色,但如果我再次单击它,则在完成第一次操作后,它会再次执行操作。

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

EN

回答 2

Stack Overflow用户

发布于 2015-03-26 02:02:03

代码语言:javascript
复制
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

这应该会防止双击

票数 0
EN

Stack Overflow用户

发布于 2015-03-26 05:07:24

使用VS2012,异步工作非常容易使用(与以前的版本相比...)。

问题是UI线程没有放手。在看不到“工作”实际发生的情况下,我无法解释其中的原因。我希望不会有任何东西重新启动按钮...

但是,Async将允许释放UI线程,并且enabled = false应生效。尝试如下所示:

代码语言:javascript
复制
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

这对我来说很管用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29262854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档