C# 控制台不显示打印输出

C# 控制台不显示打印输出,c#,wpf,console,.net-4.5,C#,Wpf,Console,.net 4.5,我使用WPF应用程序的控制台打印调试信息。控制台是这样打开的: static class DebugConsole //Console window handling class { [DllImport("Kernel32")] private static extern bool AllocConsole(); [DllImport("Kernel32")] private static extern bool FreeConsole(); [Dl

我使用WPF应用程序的控制台打印调试信息。控制台是这样打开的:

static class DebugConsole //Console window handling class
{
    [DllImport("Kernel32")]
    private static extern bool AllocConsole();

    [DllImport("Kernel32")]
    private static extern bool FreeConsole();

    [DllImport("Kernel32")]
    private static extern IntPtr GetConsoleWindow();

    [DllImport("Kernel32")]
    private static extern int GetConsoleOutputCP();

    public static bool HasConsole
    {
        get { return GetConsoleWindow() != IntPtr.Zero; }
    }

    static public void Open() //Open console window
    {
        AllocConsole();

        Console.WriteLine("test");

    }
}
。。同时在《编辑》的另一部分

    public MainWindow() //This gets executed when the application starts
    {
        DebugConsole.Open();

        InitializeComponent();                               
    }
当我用上面的代码启动应用程序时,一切都按预期进行。控制台窗口打开,并在控制台中打印文字测试

但是,如果我将主窗口代码更改为:

    public MainWindow() //This gets executed when the application starts
    {
        Console.WriteLine("test1");

        DebugConsole.Open();

        InitializeComponent();                               
    }
然后运行应用程序

预期输出:控制台打开,将包含两行文本

test1
test
实际输出:控制台打开,它根本不包含文本。事实上,我可以在代码中使用Console.WriteLine,之后控制台仍然为空。只有在未使用Console.WriteLine的情况下,在打开控制台之前,它才起作用


为什么会这样?如何修复它?

初始化控制台后打印。切换Console.WriteLinetest1和DebugConsole.Open

编辑: 当您使用Console.Writeline而不初始化控制台时,我认为它会返回一个null流,就像在Unix上将数据重定向到null时一样,但是当您调用open时,您的write方法会使用真正的标准输出。 因此,默认情况下使用的流是NullStream,否则它是标准输出。
检查

我能够创建一个包含您代码的小型控制台应用程序,我得到了您期望的输出,第一行测试1,第二行测试。您是否尝试过在MainWindow方法上设置断点以确保它按预期执行?我会尝试逐行查看输出。