gpt4 book ai didi

xaml - PowerShell 更改 ScriptBlock 中的变量

转载 作者:行者123 更新时间:2023-12-02 23:11:26 27 4
gpt4 key购买 nike

我正在尝试更改 ScriptBlock 中的变量。我做错了什么?

$reader=(New-Object System.Xml.XmlNodeReader $xaml)
$Window=[Windows.Markup.XamlReader]::Load($reader)
$Window.Add_SourceInitialized( {
$timer = new-object System.Windows.Threading.DispatcherTimer
$timer.Interval = [TimeSpan]"0:0:0.25"
$timer.Add_Tick( $updateBlock )
$timer.Start()
} )
$count = 0
$updateBlock = { Write-Host $count; $count++; Write-Host $count}

输出是 0 和 1 的重复序列。那么我如何访问变量而不仅仅是它的副本?

最佳答案

当您在 ScriptBlock 范围内修改 $count 时,会创建一个本地副本,父范围中的原始 $Count 变量保持不变。

有几种方法可以修改父作用域中的 $count,或者使用显式作用域限定符:

$updateBlock = { Write-Host $count; $script:count++; Write-Host $count}

或者通过使用 Get-Variable 和相关的 -Scope 参数检索变量(-Scope 1 指的是直接父范围) :

$updateBlock = { Write-Host $count; (Get-Variable -Scope 1 -Name count).Value++; Write-Host $count}

或者(如 pointed out by @PetSerAl ),使用 [ref] 关键字:

 $updateBlock = { Write-Host $count; ([ref]$count).Value++; Write-Host $count}

关于xaml - PowerShell 更改 ScriptBlock 中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39054075/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com