【问题标题】:In a .NET console app, is it possible to have a line of text stay visible in the console all the time?在 .NET 控制台应用程序中,是否可以在控制台中始终显示一行文本?
【发布时间】:2023-03-22 21:57:01
【问题描述】:

我正在考虑向控制台应用程序添加一个简单的带宽监视器,我想知道是否可以在控制台窗口中保持一条线始终可见。我可以手动设置一些东西,将新的控制台输出传递到一个获取控制台内容的方法中,清除控制台,在第一行添加带宽数据,然后将每一行之前的信息重写回控制台,等等。 . 但这似乎是一种非常老套的方法,而且我会限制在控制台窗口中一次可见的行数(无滚动)。

有什么想法吗?有任何内置功能吗?示例:

STATS: Downloaded: 2599b, Uploaded: 754b  <- this always stays at the top   
constantly changing text
constantly changing text
constantly changing text
constantly changing text
constantly changing text
constantly changing text
constantly changing text
constantly changing text
constantly changing text
constantly changing text
constantly changing text
constantly changing text

【问题讨论】:

  • 您打算填充控制台并使用滚动功能吗?

标签: c# vb.net console


【解决方案1】:

您可以使用Console class 的其他成员,例如CursorTopCursorLeft 来“移动”光标。如果将光标移动到行首,然后使用Console.Write,它将“覆盖”该位置的数据。

这让您可以创建您所描述的情况(通过移动光标、书写,然后向后移动)。

话虽如此,我通常会建议您在需要以特定方式呈现多个项目时立即使用 GUI 应用程序。您将拥有更大的灵活性(并且可能会更简单)。

【讨论】:

  • 一句忠告(来自以前做过这件事的人),如果新文本的字符数少于旧文本,您需要做一些准备以确保完全清除旧数据。如果你先发送“Hi There”,然后再发送“Hello”,一不小心就会收到“Helloere”。
【解决方案2】:

如果你不打算全屏运行,你可以使用Console.Title

【讨论】:

  • 好主意,由于标题通常是较小的非等宽字体,您实际上可以在标题栏中获得更多统计信息
【解决方案3】:
for (int i = 0, j = 0; i < 10000; i++, j++)
{
    top = Console.CursorTop;
    left = Console.CursorLeft;
    Console.SetCursorPosition(0, 0);
    Console.WriteLine("STATS: Downloaded: {0}b, Uploaded: {1}b", i, j);
}

这将使 STATS 保持在顶部,但根据刷新率和低于它的数据可能会变得难看。基本上它会将文本放在控制台窗口的最顶部(在滚动的顶部)。

【讨论】:

    【解决方案4】:

    正如 Reed Copsey 所说,您可以使用 WinForm 轻松复制伪造的 console application(只是在 RichTextBox 中包含一些格式化文本的简单表格)。您可以毫不费力地完成您想要做的事情,并且几乎不需要涉及的工作量,并获得预期的结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-04
      • 2010-11-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多