新封考慮以下代碼:上腳本塊
PS> $timer = New-Object Timers.Timer
PS> $timer.Interval = 1000
PS> $i = 1;
PS> Register-ObjectEvent $timer Elapsed -Action { write-host 'i: ' $i }.GetNewClosure()
PS> $timer.Enabled = 1
i: 1
i: 1
i: 1
...
# wait a couple of seconds and change $i
PS> $i = 2
i: 2
i: 2
i: 2
我認爲,當我創建新的閉包({ write-host 'i: ' $i }.GetNewClosure()
)的$i
值將被捆綁到這個封閉。但不是在這種情況下。如果我更改該值,則write-host
將採用新值。
在另一邊,這個工程:
PS> $i = 1;
PS> $action = { write-host 'i: ' $i }.GetNewClosure()
PS> &$action
i: 1
PS> $i = 2
PS> &$action
i: 1
爲什麼不與Register-ObjectEvent
工作?
如果你指定你所期望的結果,什麼導致你有這將有助於。 – Richard 2010-03-10 09:58:26
添加輸出,所以我希望它很清楚.. – stej 2010-03-10 10:21:23
它看起來像一個錯誤,或者至少我們應該有一種方法來配置它。我發現它已經提交: https://connect.microsoft.com/PowerShell/feedback/details/541754/getnewclosure-doesnt-work-on-register-objectevent# – 2010-05-04 11:33:41