Animation PowerShell:Console和SetCursorPosition中的角色动画变得疯狂

Animation PowerShell:Console和SetCursorPosition中的角色动画变得疯狂,animation,powershell,visual-studio-2012,msbuild,console,Animation,Powershell,Visual Studio 2012,Msbuild,Console,专家们, 我正在使用msbuild构建一长串VisualStudio项目。隐藏msbuild输出时,在msbuild执行其工作时,将显示基于某些角色的状态和动画。下面是使用msbuild和显示等待动画生成的脚本(您肯定会喜欢这个…): 大多数情况下,它会按预期工作,即显示如下状态: 构建MyProject(角色动画) 但突然间,情况变成了这样: 唯一发现的解决方案:我能够纠正的是,将控制台的屏幕缓冲区大小(控制台属性-->布局:屏幕缓冲区大小)增加到1024。此外,我还增加了窗口大小以填充显示器

专家们, 我正在使用msbuild构建一长串VisualStudio项目。隐藏msbuild输出时,在msbuild执行其工作时,将显示基于某些角色的状态和动画。下面是使用msbuild和显示等待动画生成的脚本(您肯定会喜欢这个…):

大多数情况下,它会按预期工作,即显示如下状态:

构建MyProject(角色动画)

但突然间,情况变成了这样:

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

我对屏幕缓冲区的评估是否正确?或者其他什么东西正在破裂? 如果是,我是否必须实际增加屏幕缓冲区大小,即从.psm1脚本内部增加


任何帮助都将不胜感激。

默认情况下,
Write Host
会在打印的字符串后面加一个换行符。不要重新定位光标,而是尝试在不使用换行符的情况下打印输出,这样您就可以使用backspace(
`b
)擦除在以下情况之前打印的字符:

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

默认情况下,
Write Host
在打印的字符串后放置一个换行符。不要重新定位光标,而是尝试在不使用换行符的情况下打印输出,这样您就可以使用backspace(
`b
)擦除在以下情况之前打印的字符:

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

所以,在挖掘了一点之后,我发现了一种我也希望它能起作用的方法,即增加托管我所有垃圾的控制台窗口的屏幕缓冲区值。因此,在我的脚本中添加了这一行,似乎可以防止角色动画破裂:

[Console]::SetBufferSize(512,512)
我还通过给它很低的值进行了实验,即15,5,是的,我重现了上述问题


所以在这个时候,这似乎是一个解决方案。然而,我仍在不时地测试它…

因此,在挖掘了一点之后,我找到了一种方法,我也希望它能起作用,即增加托管我所有垃圾的控制台窗口的屏幕缓冲区值。因此,在我的脚本中添加了这一行,似乎可以防止角色动画破裂:

[Console]::SetBufferSize(512,512)
我还通过给它很低的值进行了实验,即15,5,是的,我重现了上述问题


所以在这个时候,这似乎是一个解决方案。但是,我仍在不时地测试它…

只是想知道为什么它会在一段时间内按预期工作,即它确实会重新定位光标,但我不知道它在哪里忘记了光标在Y轴上的位置…只是想知道为什么它会在一段时间内按预期工作,即它确实会重新定位光标,但我不知道它在哪里忘记了光标在Y轴上的位置。。。。。