(Console.BufferHeight) Я не могу просмотреть/прокрутить весь вывод консоли с помощью Console.WriteLine

Когда я запускаю этот код, число в верхней части выходного окна равно 99701. Почему я не вижу до конца 1? На самом деле я вижу, что выводятся все числа, но в окне консоли я могу только ПРОКРУТИТЬ достаточно высоко, чтобы увидеть 99701 (я предполагаю). Я использую Visual C# Express в Vista Home. :D

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using utilities;

namespace Testing_Project {
    class Program {
        static void Main(string[] args) {
            List<string> myList = new List<string>();

            for (int x = 0; x < 100000; x++)
               myList.Add( x.ToString() );
            foreach (string s in myList) {
                Console.WriteLine(s);
            }

            Console.Read();
        }
    }
}

Console.Write(s) работает нормально, но Console.Write(s+"\n") - нет. Я предполагаю, что могу прокручивать только так много новых строк?


person Gordon Gustafson    schedule 02.09.2009    source источник
comment
+1 за ваш вопрос, потому что многие люди ошиблись;)   -  person Alfred Myers    schedule 03.09.2009


Ответы (5)


Начиная с .Net Framework 2.0 и выше, вы можете изменить высоту буфера из своей собственной программы с помощью Console.BufferHeight:


Console.BufferHeight = Int16.MaxValue - 1; // ***** Alters the BufferHeight *****
List<string> myList = new List<string>();
for (int x = 0; x < 100000; x++) 
    myList.Add(x.ToString()); 
foreach (string s in myList) { 
    Console.WriteLine(s); 
}

Максимальная высота — Int16.MaxValue — 1.

person Alfred Myers    schedule 02.09.2009
comment
Хм, действительно можно? Хорошо знать. Но на 100 000 штук все равно не хватит. :) - person Botz3000; 03.09.2009
comment
Это приводит меня к 67235, но что более важно, это объясняет проблему :D - person Gordon Gustafson; 04.09.2009
comment
немного сбивает с толку тот факт, что BufferHeight и BufferWidth являются Int32, но принимают только значения Int16. :/ - person cmxl; 14.04.2015

300 кажется вашим размером буфера консоли по умолчанию. Это настройка Windows, и она не связана с вашим приложением.

Вы можете изменить размер буфера консоли, создав ярлык для исполняемого файла. Затем щелкните правой кнопкой мыши ярлык и выберите «Свойства». Перейдите на вкладку «Параметры» и измените размер буфера.

Кажется, я давно не проверял эту функцию, но теперь ее можно изменить. См. Ответ Альфреда Майерса

person Pierre-Alain Vigeant    schedule 02.09.2009
comment
Его можно изменить через Console.BufferHeight до Int16.MaxValue - 1 - person Alfred Myers; 03.09.2009

Это консоль, а не ваше приложение.

В качестве альтернативы вы можете использовать Debug.WriteLine (System.Diagnostics) и окно вывода в Visual Studio. Он имеет гораздо больший буфер (только обязательно запустите сборку отладки).

person Austin Salonen    schedule 02.09.2009
comment
Вы можете изменить настройки консоли. Его можно изменить через Console.BufferHeight до Int16.MaxValue - 1 - person Alfred Myers; 03.09.2009

Это не имеет ничего общего с C#, но на самом деле буфер вывода в командной строке по умолчанию имеет длину всего 300 строк. Вы можете изменить это в настройках окна, хотя, возможно, это возможность попробовать реализовать функцию, похожую на «больше», которая прерывается каждый раз, когда выводится полный экран данных. Затем, когда вы нажимаете клавишу, он выводит еще один экран и т. д.

person Carson Myers    schedule 02.09.2009
comment
Его можно изменить через Console.BufferHeight до Int16.MaxValue - 1 - person Alfred Myers; 03.09.2009

Больше вы ничего не увидите, потому что по умолчанию консоль не буферизует более 300 строк. Используйте диалоговое окно настроек консоли, чтобы изменить это — я полагаю, что вы можете просто запустить командную строку и изменить их там, а затем запустить свою программу.

Альфред уже указал, как ваше приложение может изменить высоту буфера.

person Michael Madsen    schedule 02.09.2009
comment
Да, это. Его можно изменить через Console.BufferHeight до Int16.MaxValue - 1 - person Alfred Myers; 03.09.2009