专家们,我正在使用 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)
大多数时候,它按预期工作,即显示如下状态:
构建 MyProject(动画角色)..
但是突然之间,变成了这样:
唯一发现的解决方案:我能够纠正这个是将控制台的屏幕缓冲区大小(控制台属性->布局:屏幕缓冲区大小)增加到 1024。此外,我还增加了窗口大小以填充监视器,但它没有不要那样打破。
我对 Screen Buffer 的评估是否正确?或者还有什么正在分手?如果是,我是否必须实用地增加屏幕缓冲区大小,即从我的 .psm1 脚本内部。
任何帮助将非常感激。