You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PowerShell脚本中循环多次打开WPF窗口直至触发停止条件

PowerShell WPF窗口循环加载实现方案

修改后可直接运行的代码

[System.Reflection.Assembly]::LoadWithPartialName("PresentationFramework") | Out-Null

function Import-Xaml {
    # 此处替换为你自己的XAML文件实际路径
    [xml]$xaml = Get-Content -Path "C:\Users\Test\WpfWindow1.xaml"
    $manager = New-Object System.Xml.XmlNamespaceManager -ArgumentList $xaml.NameTable
    $manager.AddNamespace("x", "http://schemas.microsoft.com/winfx/2006/xaml");
    $xamlReader = New-Object System.Xml.XmlNodeReader $xaml
    [Windows.Markup.XamlReader]::Load($xamlReader)
}

# 循环控制变量,需要停止流程时将该值设为$false即可
$running = $true

while ($running) {
    # 每次循环生成全新的窗口实例,避免资源释放后无法复用的问题
    $currentWindow = Import-Xaml
    $targetButton = $currentWindow.FindName("Button")
    
    # 绑定当前窗口按钮的点击事件
    $targetButton.Add_Click({  
        $this.Parent.Close()   
    })

    # 模态显示窗口,代码会阻塞到窗口被手动关闭或按钮点击关闭
    $currentWindow.ShowDialog()

    # 下方放置你需要执行的自定义脚本逻辑
    # 如需停止循环,可在该段逻辑中添加判断,满足条件时设置 $running = $false
    # Run Code
}

关键逻辑说明

  • 取消了提前预生成多个窗口实例的写法,改为每次循环动态生成新的窗口实例,解决WPF窗口资源释放后无法重复加载渲染的问题
  • 按钮点击事件使用$this.Parent.Close()实现,无需依赖外部循环变量,规避了PowerShell闭包作用域导致的变量关联错误,保证每一轮窗口的按钮都能正常触发关闭
  • 用$running全局变量控制循环启停,你可以在自定义脚本执行段添加任意停止判断逻辑,满足条件时修改该变量值即可终止整个流程
  • 依托ShowDialog()的模态阻塞特性,确保窗口完全关闭后才会执行后续自定义脚本,再进入下一轮窗口加载流程,完全符合要求的执行顺序

内容的提问来源于stack exchange,提问作者Simply Uncensored

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 00:09:03