我们有一些方法可以将大量彩色文本输出到控制台。
它实际上是一个通过循环访问一组数据而构建的菜单。
因为我们是逐项写的(一行包含许多不同颜色的项目), 这个过程在低端和中端机器上相当慢。在那些机器上,您可以看到每一行都被一行一行地写入,这对最终用户来说相当令人沮丧。
这个菜单必须显示很多次,所以我想知道我是否不能以某种方式“缓存”这个输出。如果没有彩色文本,我会简单地将输出存储在一个字符串中并一次性写入,但我不想丢失颜色信息。
有什么建议吗?
更新:只是为了了解输出的强度: 更新 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 类,因此我们不必继续设置颜色。
最佳答案
也许您可以使用 MoveBufferArea 来做一些聪明的事情功能。如果您有一个当前对用户不可见的缓冲区区域怎么办?您可以在那里创建缓冲区\菜单,然后将整个区域一次性复制到可见缓冲区的一部分。我不知道你对缓冲区的可见/不可见区域有多少控制权,如果你能像这样使用它们,这只是一个建议。
我能想到的唯一其他选择是创建您自己的模仿控制台的控件。然后,您可以允许缓冲读/写或仅在进行多项更改后刷新。但这可能需要大量额外工作。
关于c# - 缓存 System.Console 输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1781523/