我正在使用PowerShell ISE(PS版本5.0)。如果我运行此代码:代码更改后,PowerShell ISE有时表现不可预知
Write-Host "This"
它输出:
This
如果我修改这样的脚本:
Write-Host "That"
它输出:
That
大。如预期。现在,如果我有这样的代码:
$Form = New-Object System.Windows.Forms.Form
$Timer = New-Object System.Windows.Forms.Timer
$Timer.Add_Tick(
{
&{
Write-Output "Here"
$Form.Close()} | Write-Host
})
$Timer.Interval = 3000
$Timer.start()
$result = $Form.ShowDialog()
它输出:
Here
如果我在脚本改变什么,例如"Here"
到"There"
或$Timer.Interval = 3000
到$Timer.Interval = 4000
并运行它,它会做两件意想不到的事情:1.)不是在适当的时间内显示表单,而是在屏幕上短暂闪烁,并且2.)它会输出原始的Here
There
。如果我关闭ISE并重新打开它,脚本将按预期运行。
这是怎么回事?
好吧,它看起来像你没有处理对象...所以你只是创建了很多对象的实例。从新开始清除内存中的对象 – gvee
当您说“运行它”时 - 是运行整个文件/代码片段,还是只运行最后一部分?在关闭一次后你不能显示表单,除非你重新实例化'$ timer',原始的事件注册仍然存在 –
@gvee - 所以你说ISE持有这些对象甚至停止后?来自.NET和Visual Studio并没有太多的PS经验,我觉得这是奇怪的和意想不到的。我在想“对象应该在它停止执行后自动处理。” –