在调试过程中使用多个控制台(不是多个监视器,我已经拥有)会很方便。我想象的是Console.WriteLine(1,String1),它将String1发送到一个控制台窗口1和Console.WriteLine(2,String2),它将String2发送到控制台窗口2.
答案 0 :(得分:6)
都能跟得上
进程只能与一个控制台关联,因此如果调用进程已有控制台,则AllocConsole函数将失败。进程可以使用FreeConsole函数将其自身与当前控制台分离,然后它可以调用AllocConsole来创建新控制台或AttachConsole以附加到另一个控制台。
相反,您可以使用WinForms或WPF创建多个“控制台”窗口,并编写一个简单的WriteLine
方法将文本附加到文本框或类似文件。
另一种选择是打开日志文件,并将其用作第二个“控制台”。
答案 1 :(得分:5)
没有。 Console类只是围绕Win32控制台理念的一个非常薄的包装器。基本上你在使用时看到的一切
cmd.exe
。没有办法在一个过程中创建其中的两个。
是。在WPF或WinForms中实际上可以构建一个非常类似于控制台的类。使用它将文本吐出到命令行,如应用程序。
答案 2 :(得分:2)
您可能需要考虑多个日志追加器的概念,而不是多个控制台。我不是printf debugging
的忠实粉丝,但我确实有时会看到多个日志文件的位置。使用log4net之类的东西,您可以配置与不同类/命名空间相对应的多个appender和logger,并将它们记录到单独的文件中。您可以使用日志记录信息来帮助调试TextPad之类的东西,以便在调试时查看日志文件,因为TextPad与NotePad不同,它检测并允许您查看文件时所做的任何更新的内容。打开。可能还有其他编辑器允许这样做,但我熟悉TextPad。
答案 3 :(得分:2)
我有同样的需求,我在这里找到了你的问题。很多年后:) :)
事实上,.NET并没有这种功能,但是我们可以通过使用一些缓冲将屏幕分成网格来模拟它。
以下是一个例子:
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<int>(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)
希望它有所帮助。