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

Nor*_*rmD 5 c# vb.net

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

Log*_*ldo 6

进程只能与一个控制台关联,因此如果调用进程已有控制台,则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方法将文本附加到文本框或类似文本框中.

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


Jar*_*Par 5

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

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

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

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


Ped*_*ões 5

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

事实上,.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();
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

输出

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

它可以打包到一个库和一个通用 API 中,就像您所描述的那样:

Console.WriteLine(1, String1)
Console.WriteLine(2, String2)
Run Code Online (Sandbox Code Playgroud)

希望它能帮助某人。