Я строил «обратную консоль» (чтобы написанные строки добавлялись вверху, а не внизу), когда я наткнулся на очень странное поведение метода 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, 6 ГБ DDR3, так что хранение не должно быть проблемой .... Кто-нибудь знает, что может быть не так?