新封考虑以下代码:上脚本块
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