鉴于这段代码:
someobject.ProgressChanged += (sender, args) => Console.WriteLine(args.ProgressPercentage);
我怎么能在powershell中写同样的东西,我使用了Register-Event但是当我在对象上调用execute方法时它只是阻塞了线程并且你只看到事件在动作完成后触发了,我也尝试使用开始工作。
有任何想法吗?
鉴于这段代码:
someobject.ProgressChanged += (sender, args) => Console.WriteLine(args.ProgressPercentage);
我怎么能在powershell中写同样的东西,我使用了Register-Event但是当我在对象上调用execute方法时它只是阻塞了线程并且你只看到事件在动作完成后触发了,我也尝试使用开始工作。
有任何想法吗?
Register-ObjectEvent应该可以工作:
Register-ObjectEvent -InputObject $someobject -EventName ProgressChanged `
-Action { Write-Host $EventArgs.ProgressPercentage }
有关PowerShell 中的异步事件处理的详细信息,请参阅此 TechNet 文章。
编辑:根据评论中的要求,这是我在测试中使用的代码:
$timer = New-Object System.Timers.Timer
$timer.Interval = 500
$timer.AutoReset = $true
Register-ObjectEvent -InputObject $timer -EventName Elapsed `
-Action { Write-Host $EventArgs.SignalTime }
$timer.Start()
从那时起,Elapsed
事件的信号时间每半秒打印一次到控制台,直到我设法盲输入$timer.Stop()
。