gpt4 book ai didi

animation - PowerShell:控制台和 SetCursorPosition 中的角色动画变得疯狂

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

专家们,
我正在使用 msbuild 构建一长串 Visual Studio 项目。在隐藏 msbuild 输出的同时,在 msbuild 工作时显示基于某些字符的状态和动画。这里我的脚本使用 msbuild 构建并显示等待动画(你一定会喜欢这个......):

$anim=@("|","/","-","\","|") # Animation sequence characters
$ReturnCode = @{}
$BuildStatus="Building $(ProjectName)"

$CursorTop=[Console]::CursorTop #// Cursor position on Y axis
$CursorLeft=$BuildStatus.Length #// Cursor position on X axis
Write-Host $BuildStatus -ForegroundColor Cyan

#// starting the MsBuild job in background.

$MsbJob = [PowerShell]::Create().AddScript(
{
param($MsbArgs, $Result)
& msbuild $MsbArgs | Out-Null
$Result.Value = $LASTEXITCODE
}
).AddArgument($MsbArgs).AddArgument($ReturnCode)

$async = $MsbJob.BeginInvoke() #// start executing the job.

#// While above script block is doing its job in background, display status and animation in console window.

while (!$async.IsCompleted)
{
foreach ($item in $anim) #// looping on array containing characters to form animation
{

[Console]::SetCursorPosition($CursorLeft + 5,$CursorTop) #//setting position for cursor
Write-Host $item -ForegroundColor Yellow
Start-Sleep -m 50
}
}

$MsbJob.EndInvoke($async)

大多数时候,它按预期工作,即显示如下状态:

Building MyProject (Animating characters)..



但突然之间,变成了这样: enter image description here

唯一发现的解决方案:我能够纠正这是将控制台的屏幕缓冲区大小(控制台属性->布局:屏幕缓冲区大小)增加到 1024。此外,我还增加了窗口大小以填充监视器,它并没有像那。

我对 Screen Buffer 的评估是否正确?或者还有什么正在分手?
如果是,我是否必须务实地增加屏幕缓冲区大小,即从我的 .psm1 脚本内部?

任何帮助将非常感激。

最佳答案

默认 Write-Host在打印的字符串后放置一个换行符。与其重新定位光标,不如尝试在没有换行符的情况下打印输出,因此您可以使用退格( `b )删除之前打印的字符:

while (!$async.IsCompleted) {
$anim | % {
Write-Host "`b$_" -NoNewline -ForegroundColor Yellow
Start-Sleep -m 50
}
}

关于animation - PowerShell:控制台和 SetCursorPosition 中的角色动画变得疯狂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19265360/

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