c# - 缓存 System.Console 输出

标签 c# .net console console-application

我们有一些方法可以将大量彩色文本输出到控制台。

它实际上是一个通过循环访问一组数据而构建的菜单。

因为我们是逐项写的(一行包含许多不同颜色的项目), 这个过程在低端和中端机器上相当慢。在那些机器上,您可以看到每一行都被一行一行地写入,这对最终用户来说相当令人沮丧。

这个菜单必须显示很多次,所以我想知道我是否不能以某种方式“缓存”这个输出。如果没有彩色文本,我会简单地将输出存储在一个字符串中并一次性写入,但我不想丢失颜色信息。

有什么建议吗?

更新:只是为了了解输出的强度: 更新 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/

相关文章:

c# - EFCore Linq ThenInclude 两个外键到同一个表

C# 通用类的模式匹配属性?

c# - 如何将额外的 postdata 传递到添加记录函数 - JQGrid-MVC。网

c - 分配仅在释放时失败

c# - 在有很多类需要动态生成其他类的项目中进行依赖注入(inject)

c# - 是否可以将配置绑定(bind)到 .NET Core 中的无状态/只读模型?

.net - 如何在 Visual Studio 中调试 Windows PowerShell 模块?

.net - ASP.NET如何将控件呈现为HTML?

python - 使用 print() 太多会导致它失败吗?

java - 扩展 Ascii 在控制台中不起作用!