4

このコードを考えると:

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

PowerShellで同じことを書くにはどうすればよいですか?Register-Eventを使用しましたが、オブジェクトでexecuteメソッドを呼び出すと、スレッドがブロックされるだけで、アクションの終了後にイベントが発生したことがわかりますが、これも使用しようとしましたStart-Job。

何か案は?

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

それ以降、イベントの信号時間がElapsed0.5 秒ごとにコンソールに出力され、ブラインド タイプすることができました$timer.Stop()

于 2012-08-24T13:32:25.157 に答える