【发布时间】:2021-10-06 23:57:37
【问题描述】:
我已经尝试过这个答案中提到的代码:https://stackoverflow.com/a/27089652/
它工作正常,我想用它在 for 循环中运行 PowerShell 脚本。 GUI 最初是冻结的,然后我尝试了这个答案中提到的代码:https://stackoverflow.com/a/35735760/
现在,当 PowerShell 脚本在后台运行时,GUI 不会冻结,尽管在 for 循环完成之前文本框中没有更新任何内容。我想看到实时更新的结果。这是我正在运行的代码:
private async void run_click(object sender, RoutedEventArgs e)
{
Text1.Text = "";
await Task.Run(() => PS_Execution(Text1));
}
internal async Task PS_Execution(TextBox text)
{
PowerShell ps = PowerShell.Create();
ps.AddScript(script.ToString());
{
Collection<PSObject> results = ps.Invoke();
foreach (PSObject r in results)
{
text.Dispatcher.Invoke(() =>
{
text.Text += r.ToString();
});
await Task.Delay(100);
}
}
}
也许我错过了一些重要的事情。请帮助我了解如何解决此问题。
【问题讨论】:
-
这能回答你的问题吗? Write PowerShell Output (as it happens) to WPF UI Control 或简单地使用
Start-Job,如here -
您缺少的最重要的事情是您对 UI 元素接收数据的主要方式的无知:绑定到数据上下文属性。如果已为 text.Text 分配绑定,则不需要 Dispatcher 调用。更改 Bind 源属性的值就足够了。
标签: wpf powershell async-await