禁用按钮仍然触发 Click 事件
Disabled button still triggers Click event
我试图防止用户快速垃圾点击按钮,这可能会在代码多次执行时冻结应用程序几分钟。
$searchBtn_clicked = {
$searchBtn.Enabled = $false
... some code that fills a listview from search result
$searchBtn.Enabled = $true
}
我的问题是:无论如何,上面的代码都会在单击按钮时执行多次。单击后禁用按钮不会改变任何内容。我还尝试在启用它之前添加一个 start-sleep 2
。
第一次点击触发代码,随后点击被禁用的按钮...并且仍然会触发 Click 事件,只要按钮再次启用。
这里发生了什么?某种异步魔法?所有点击事件都以某种方式排队,并且仅在按钮再次启用后才被处理?
我是 PowerShell 的新手,很困惑。
添加[System.Windows.Forms.Application]::DoEvents()
:
$searchBtn.Add_Click({
$this.Enabled = $false
# ... some code that fills a listview from search result
# flush out all pending events
[System.Windows.Forms.Application]::DoEvents()
$this.Enabled = $true
})
希望对您有所帮助
Windows 消息按顺序排队处理。如果您的代码很忙,这些消息(垃圾邮件点击)将存储在该队列中并在可能时进行处理。 DoEvents()
告诉 window 处理当前在消息队列中的所有消息,有效地刷新它。
我试图防止用户快速垃圾点击按钮,这可能会在代码多次执行时冻结应用程序几分钟。
$searchBtn_clicked = {
$searchBtn.Enabled = $false
... some code that fills a listview from search result
$searchBtn.Enabled = $true
}
我的问题是:无论如何,上面的代码都会在单击按钮时执行多次。单击后禁用按钮不会改变任何内容。我还尝试在启用它之前添加一个 start-sleep 2
。
第一次点击触发代码,随后点击被禁用的按钮...并且仍然会触发 Click 事件,只要按钮再次启用。
这里发生了什么?某种异步魔法?所有点击事件都以某种方式排队,并且仅在按钮再次启用后才被处理?
我是 PowerShell 的新手,很困惑。
添加[System.Windows.Forms.Application]::DoEvents()
:
$searchBtn.Add_Click({
$this.Enabled = $false
# ... some code that fills a listview from search result
# flush out all pending events
[System.Windows.Forms.Application]::DoEvents()
$this.Enabled = $true
})
希望对您有所帮助
Windows 消息按顺序排队处理。如果您的代码很忙,这些消息(垃圾邮件点击)将存储在该队列中并在可能时进行处理。 DoEvents()
告诉 window 处理当前在消息队列中的所有消息,有效地刷新它。