add_NameOfEvent({scriptblock})
在 PowerShell 中,您可以使用对象的 -method订阅事件。这适用于按钮等 Form 对象。但是当我尝试使用它时System.Timers.Timer
它不起作用。这是为什么?样本:
$timer1 = New-Object System.Timers.Timer
$timer1.Interval = 2000
$timer1.add_Elapsed({ Write-Host "Timer1 tick" })
$timer2 = New-Object System.Timers.Timer
$timer2.Interval = 2000
Register-ObjectEvent -InputObject $timer2 -EventName Elapsed -Action { Write-Host "Timer2 tick" }
$timer1.Start()
$timer2.Start()
$timer2
可以正常工作,但$timer1
永远不会写入控制台。与前任有何Timer
不同。一个表单组件(该add_...
方法工作的地方)?是否Timer
在单独的线程中运行并因此写入“隐藏”控制台?
证明该方法适用于那些不熟悉它的表单组件:
PS > Add-Type -AssemblyName System.Windows.Forms
PS > $b = New-Object System.Windows.Forms.Button
PS > $b.add_click({ Write-Host "button" })
#Get-EventSubscriber won't show this event, but it's added
PS > $b.PerformClick()
button