你有多个.net控制台(如在Console.Writeline中)

在调试过程中使用多个控制台(不是多个监视器,我已经拥有)会很方便。 我想象的是Console.WriteLine(1,String1),它将String1发送到一个控制台窗口1,Console.WriteLine(2,String2)将String2发送到控制台窗口2。

进程只能与一个控制台关联,因此如果调用进程已有控制台,则AllocConsole函数将失败。 进程可以使用FreeConsole函数将其自身与其当前控制台分离,然后它可以调用AllocConsole来创建新控制台或AttachConsole以附加到另一个控制台。

[ http://msdn.microsoft.com/en-us/library/ms681944(VS.85).aspx](http://msdn.microsoft.com/en-us/library/ms681944(VS.85)。 ASPX)

相反,您可以使用WinForms或WPF创建多个“控制台”窗口,并编写一个简单的WriteLine方法将文本附加到文本框或类似文本框中。

另一种选择是打开日志文件,并将其用作第二个“控制台”。

是否可以在同一个应用程序中安装2个Windows控制台?

不,Console类只是围绕Win32控制台理念的一个非常薄的包装器。 基本上您在使用cmd.exe时看到的一切。 没有办法在一个过程中创建其中的2个。

我可以有2个类似控制台的窗口吗?

是。 有可能在WPF或WinForms中构建一个非常类似于控制台的类。 使用它将文本吐出到命令行,如应用程序。

您可能需要考虑多个日志追加器的概念,而不是多个控制台。 我不是printf debugging忠实粉丝,但我确实有时会看到多个日志文件的位置。 使用类似log4net的东西,您可以配置对应于不同类/命名空间的多个appender和logger,并将它们记录到单独的文件中。 您可以使用日志记录信息来帮助调试使用TextPad之类的东西来在调试时查看日志文件,因为TextPad与NotePad不同,它检测并允许您查看文件打开时所做的任何更新的内容。 可能还有其他编辑器允许这样做,但我熟悉TextPad。

我有同样的需求,我在这里找到了你的问题。 很多年后:)

事实上,.NET没有这种function,但我们可以通过使用一些缓冲将屏幕分成网格来模拟它。

这是一个例子:

 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApp1 { class Program { static void print(int x, int y, int n) { for(int i = 0; i < 20; i++) { Console.CursorLeft = x; Console.CursorTop = y++; Console.Write(new string(n.ToString().Last(), 60)); } } static void Main(string[] args) { var l = new List(new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 }); while (true) { Console.Clear(); Console.CursorVisible = false; for (int i = 0; i < l.Count; i++) { print((i % 3) * 60, (i / 3) * 20, l[i]++); } Task.Delay(1000).Wait(); } } } } 

产量

因此屏幕被划分为3x3网格,并使用光标位置更新每个屏幕。

它可以打包成lib和通用API,就像你描述的那样:

 Console.WriteLine(1, String1) Console.WriteLine(2, String2) 

希望它可以帮到某人。