当我偶然发现 Console.MoveBufferArea 方法的一个非常奇怪的行为时,我正在构建一个“反向控制台”(以便写入的行会附加在顶部而不是底部):
static void Main()
{
for (var _linesWritten = 0; _linesWritten < 1000; _linesWritten++)
{
var _height = Math.Min(Console.BufferHeight-1, _linesWritten);
Console.MoveBufferArea(0, 0, Console.BufferWidth, _height, 0, 1);
Console.SetCursorPosition(0, 0);
Console.WriteLine("Line {0} aaaaaaaaaa", _linesWritten);
Console.ResetColor();
}
}
当我调用它固定次数时,它会抛出 System.IO.IOException 说:“没有足够的存储空间来处理这个命令”。我发现这取决于正在移动的缓冲区的数量。当我更改 Console.BufferWidth 属性时,在抛出异常之前写入的行数会发生变化。
我正在运行 Windows 7 x64 @ Corei7,6gb DDR3,所以存储不应该是问题......有人知道可能出了什么问题吗?