gpt4 book ai didi

c# - Powershell 线程与 C# 线程

转载 作者:行者123 更新时间:2023-12-03 12:44:49 25 4
gpt4 key购买 nike

在 C# 中,当我想创建一个调用函数的线程时,我只需这样做。

Thread t = new Thread(() => calledFunction());
t.Start();
我的目标是在 Powershell 中做同样的事情。没什么特别的,它的唯一目的是防止 GUI 卡住。但我只是找不到一个有效的解决方案。
目前,我只是想让运行空间做任何事情。
如果我把它放在一个按钮的点击事件中,什么都不会发生。
$Runspace = [runspacefactory]::CreateRunspace()
$PowerShell = [powershell]::Create()
$PowerShell.runspace = $Runspace
$Runspace.Open()

[void]$PowerShell.AddScript({

$test = "test"
Write-Host $test

})

$PowerShell.Invoke()
但是如果我在脚本块中放了一个消息框,那么效果很好。当某些事情有效而某些事情无效时,这让我感到非常困惑。
如果您有一项任务,您必须调用一个函数来完成一些工作并更新 GUI。您将如何在自己的线程中调用该函数,以便 GUI 在 Powershell 中工作时不会卡住?在 C# 中,我有上面发布的简单示例或使用 BackgroundWorker。

最佳答案

If I put this inside a click event of a button

$PowerShell.Invoke()同步执行,因此它会根据定义阻塞,直到您添加的脚本完成,因此它会卡住 GUI。

nothing happens.

Write-Host $test (在 PSv5+ 中)写入信息流(流编号 6 ),不直接由 .Invoke() 返回call - 只有成功输出(流号 1)是;见 about_Redirection .
此外,即使有成功输出,从事件处理程序输出到成功流也不会出现在控制台(终端)中。

If you had a task where you had to call a function that does some work and updates a GUI. How would you go about calling that function in its own thread so that the GUI won't freeze while it's working in Powershell?


见以下 WPF-based answer ,它可以以相对较少的努力适应 WinForms。

关于c# - Powershell 线程与 C# 线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66404460/

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