将控制台分成两部分,用于两个输出

我正在创建一个控制台应用程序,我希望有两个输出和一个输入。 原因是一个输出始终可见。

This is the first output Text flows upwards just like a regular console application, however... --------- This is a second output This is placed at the bottom of the console // also input goes here. 

我想把它称之为这样的东西

  Console.Out.Writeline("This is the first output"); Console.Out.Writeline("Text flows upwards just like a regular console application, however..."); MyTextWriter.WriteLine("This is a second output"); MyTextWriter.WriteLine("This is placed at the bottom of the console"); 

但是我如何将控制台拆分为两部分呢? 它甚至可能吗?

如果我理解正确,您可以使用Console.SetCursorPosition在您想要的地方绘制文本。 这是一个粗略的例子,它将控制台分成两个区域,文本在向上移动时向上流动。

 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { static List area1 = new List(); static List area2 = new List(); static int areaHeights = 0; static void Main(string[] args) { // Number of rows for each area areaHeights = (Console.WindowHeight - 2) / 2; drawScreen(); int i = 0; while (true) { i++; // jumb between areas if (i % 2 == 0) AddLineToBuffer(ref area1, Console.ReadLine()); else AddLineToBuffer(ref area2, Console.ReadLine()); drawScreen(); } } private static void AddLineToBuffer(ref List areaBuffer, string line) { areaBuffer.Insert(0, line); if (areaBuffer.Count == areaHeights) { areaBuffer.RemoveAt(areaHeights - 1); } } private static void drawScreen() { Console.Clear(); // Draw the area divider for (int i = 0; i < Console.BufferWidth; i++) { Console.SetCursorPosition(i, areaHeights); Console.Write('='); } int currentLine = areaHeights - 1; for (int i = 0; i < area1.Count; i++) { Console.SetCursorPosition(0, currentLine - (i + 1)); Console.WriteLine(area1[i]); } currentLine = (areaHeights * 2); for(int i = 0; i < area2.Count; i++) { Console.SetCursorPosition(0, currentLine - (i + 1)); Console.WriteLine(area2[i]); } Console.SetCursorPosition(0, Console.WindowHeight - 1); Console.Write("> "); } } } 

我假设您想要填写每个区域不仅用户输入? 如果需要,您需要在单独的线程中设置控制台的绘图,并让该线程在需要时更新屏幕。

如果我理解正确,这可能会有所帮助:

 Console.WriteLine("Head"); Console.WriteLine("Message"); Console.ReadKey(); Console.SetCursorPosition(0, 1); Console.WriteLine("Message2"); 

标准Windows控制台不提供此类function。 你必须编写自己的窗口才能做到这一点。

独特的想法,但到目前为止,我没有注意到使用普通的控制台应用程序类似的东西。

那么是什么阻止你使用表单应用程序并将程序分成两个不同的部分?

您可能想要尝试的另一种方法是输出到2个不同的控制台,这很可能是您不想要的。