【发布时间】:2013-10-09 07:09:23
【问题描述】:
专家, 我正在使用 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。此外,我还增加了填充监视器的窗口大小,它并没有像那样中断。
我对屏幕缓冲区的评估是否正确?或者还有什么正在分手? 如果是,我是否必须务实地增加屏幕缓冲区大小,即从我的 .psm1 脚本内部?
任何帮助将不胜感激。
【问题讨论】:
标签: animation powershell visual-studio-2012 msbuild console