4

鉴于这段代码:

someobject.ProgressChanged += (sender, args) => Console.WriteLine(args.ProgressPercentage);

我怎么能在powershell中写同样的东西,我使用了Register-Event但是当我在对象上调用execute方法时它只是阻塞了线程并且你只看到事件在动作完成后触发了,我也尝试使用开始工作。

有任何想法吗?

4

1 回答 1

4

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()

于 2012-08-24T13:32:25.157 回答