禁用按钮仍然触发 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 处理当前在消息队列中的所有消息,有效地刷新它。