这是因为你混淆了两种处理 object event 的方式,如果你 Register-ObjectEvent 的时候传入了 Action,那么 Wait-Event 的效果是未定义,因为文档
https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/wait-event 说
This feature provides an alternative to polling for an event. It also allows you to determine the response to an event in two different ways:
- using the Action parameter of the event subscription
- waiting for an event to return and then respond with an action
第一项的意思是 Register-XyzEvent 的时候传入 Action 参数,第二项的意思是可以 Wait-Event 一个(没有传入 Action )的 event source identifier 。
如果你想既有超时,又可以处理 event,可以这样做:
# 不要传入 Action
Register-ObjectEvent $balloon BalloonTipClicked -sourceIdentifier $SourceIdentifier
$balloon.ShowBalloonTip(5000)
$event = Wait-Event -timeout -1 -sourceIdentifier $SourceIdentifier
if ($event -eq $null)
{
Write-Host "超时"
}
else
{
Write-Host "没有超时"
& $OnClicked
}
另外 Wait-Event 成功一次后再 Wait-Event 同一个事件回立刻返回,如果想要等下一次发生,需要删除后重新添加。