powershell - start-sleep 将冻结 Register-ObjectEvent 动作脚本块
问题描述
$EventHandlerScripBlock = {
if (! [String]::IsNullOrEmpty($EventArgs.Data)) {
$EventArgs.Data
}
}
$ProcessStdOutEvent = Register-ObjectEvent -InputObject $Process -Action $EventHandlerScripBlock -EventName 'OutputDataReceived'
$emptyStopWatch = [Diagnostics.Stopwatch]::StartNew()
while($true)
{
start-sleep -s 10
[array]$output = receive-job $ProcessStdOutEvent
if ($output)
{
$output
$emptyStopWatch.Restart()
}
elseif ($emptyStopWatch.elapsed.TotalMilliseconds -gt $OutputCheckIntervalInMs)
{
break;
}
}
我想启动一个进程并读取它的标准输出。我无法直接从进程读取标准输出,$process.standardoutput.ReadToEnd()
因为它会阻塞并等待进程退出。所以我需要像上面的代码一样使用异步样式。但我发现start-sleep -s 10
会阻止EventHandlerScripBlock
执行。如果我删除start-sleep -s 10
,它是否过于频繁地读取输出?
解决方案
推荐阅读
- python-2.7 - What is a def __call__(self,in_data) function used for in python and where is the in_data getting its value
- python - Unable to install PyMuPDF on Mac 10.14.5
- c# - 如何在 WPF 应用程序中切换页面?
- webrtc - Can Janus WebRTC server implement server-side peer?
- python - 如何使用 Python 正确执行带有 JSON 文件的 AWS Lambda API 发布请求
- python - 504 Deadline Exceeded running simple python example
- c - 启用/禁用硬件锁定消除
- php - Convert an EPS file with transparency and CMYK colorspace to PNG with ImageMagick
- c# - Ternary condition in c# logic not working as desired
- django - 从 Viewset 调用时无法获取查询集的代表