우리는 많은 색의 텍스트를 콘솔에 출력하는 몇 가지 방법을 가지고 있습니다.캐싱 System.Console 출력
실제로는 데이터 컬렉션을 반복하여 만들어지는 메뉴입니다.
우리가 항목을 쓰고 있고 (한 줄에 여러 가지 색상의 항목이 많이 포함되어 있기 때문에) 로우 엔드 및 미드 엔드 컴퓨터의 경우 다소 느립니다. 이 머신에서는 하나 하나 작성되는 각 행을 볼 수 있으며 최종 사용자에게는 오히려 실망 스럽습니다.
이 메뉴는 여러 번 표시되어야하므로 어떻게 든이 출력을 "캐시"할 수 없는지 궁금합니다. 색상이있는 텍스트가 없으면 단순히 출력을 문자열에 저장하고 한 번에 쓰면되지만 색상 정보는 잃고 싶지 않습니다.
제안 사항?
업데이트 : 업데이트 : 2 : 그냥 출력이 얼마나 집중의 아이디어를 제공하기 위해 실수 코드를 업데이트을하지만, 여전히 어떻게 든 출력을 버퍼링합니다. 우리가 색을 설정 계속해야하지 않을 수 있도록 MoveBufferArea는 (원치 않는 스크롤 바를 작성)
DefaultBanner();
WriteLine("Available tests:\n", ConsoleColor.White);
var methodNames = methods.Select(m => ((TestAttribute)m.GetCustomAttributes(false)[0]).Name).ToArray();
int vertical = 0;
for (int i = 1; i <= methods.Length; i++)
{
if (i > methods.Length/2)
{
Console.SetCursorPosition(40, 4 + vertical++);
}
Write("(");
Write(i, ConsoleColor.Yellow);
WriteLine(") {0:00}", methodNames[i - 1]);
}
Write("\n(");
Write(items.Count + 1, ConsoleColor.Yellow);
Write(") Set address | (");
Write(items.Count + 2, ConsoleColor.Yellow);
Write(") View Log | (");
Write(items.Count + 3, ConsoleColor.Yellow);
Write(") Open Log directory \n(");
Write(items.Count + 4, ConsoleColor.Yellow);
Write(") Open configuration | (");
Write(items.Count + 5, ConsoleColor.Yellow);
Write(") View current configuration | (");
Write(items.Count + 6, ConsoleColor.Yellow);
WriteLine(") Quit");
Write("\nYour selection: ");
int command = 0;
while (!ConsoleReader<int>.TryReadValueInRange(1, items.Count + 6,out command));
return command;
write 메서드는 단순히 System.Console 클래스의 일부 행동 을 캡슐화 도우미 방법입니다 부분적인 해결책이 될 증명한다.
비록 내가 이것을 저장하더라도 나는 콘솔에 글쓰기를 할 때마다 색깔을 바꿔야 만 할 것이다. 이 문자열을 만드는 프로세스는 많은 시간을 차지하지 않습니다. Console.Write, Console에 대한 수많은 호출입니다.WriteLine 및 Console.SetCursorPosition 및 Console.Foreground = 항상 사용하는 호출. (추신 : 빠른 기계에서는 전혀 알지 못합니다.) – TimothyP