当我试图做一些很可能超出 PowerShell 范围的事情时,我似乎遇到了障碍。我有一个主窗体脚本,它协调了我的大部分功能,但我需要另一个脚本来打开侦听器(system.Net.Sockets.Udpclient.Receive)并在整个程序运行过程中不断向主窗体中的文本框输入信息。
在我的一生中,我无法摆脱工作所遭受的这种愚蠢的非儿童环境;没有点源,没有全局范围的变量,什么都没有。我可以在其上放置一个对象侦听器以完成状态更改,然后打开另一个侦听器并尝试以这种方式回避,但它会变得非常混乱和不可靠。
作为一种解决方法,我希望有一个 TCP/UDP 侦听器,它不会挂起应用程序以获取响应、拉取 hasmoredata 的事件或从作业内更新主脚本中的文本框的方法。
您可以通过引发事件并将其转发回本地会话来从作业返回数据。
这是一个例子:
$job = Start-Job -Name "ReturnMessage" -ScriptBlock {
# forward events named "MyNewMessage" back to job owner
# this even works across machines
Register-EngineEvent -SourceIdentifier MyNewMessage -Forward
while($true) {
sleep 2
$i++
$message = "This is message $i."
# raise a new progress event, assigning to $null to prevent
# it ending up in the job's output stream
$null = New-Event -SourceIdentifier MyNewMessage -MessageData $message
}
}
$event = Register-EngineEvent -SourceIdentifier MyNewMessage -Action {
Write-Host $event.MessageData -ForegroundColor Green
}
<# Run this to stop job and event listner
$job,$event| Stop-Job -PassThru| Remove-Job
#>
请注意,作业运行时您仍然可以在提示符处键入。执行块注释中的代码以停止作业和事件监听器。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)