控制台未显示打印输出

时间:2014-07-16 11:30:31

标签: 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();

    [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();                               
    }

当我使用上面的代码启动应用程序时,一切都按预期工作。打开控制台窗口,在控制台中打印出“test”字样。

但是,如果我将MainWindow()代码更改为:

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

        DebugConsole.Open();

        InitializeComponent();                               
    }

并运行应用程序......

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

test1
test

实际输出:控制台打开,根本不包含任何文本。事实上,我可以在代码中使用Console.WriteLine,然后控制台保持为空。只有在打开控制台之前没有使用Console.WriteLine时,它才有效。

为什么会这样?我该如何解决?

1 个答案:

答案 0 :(得分:0)

初始化控制台后打印。切换Console.WriteLine("test1")DebugConsole.Open()

修改 在没有初始化控制台的情况下使用Console.Writeline时,我认为它返回NullStream()(就像在Unix上将数据重定向到null时一样)但是当你调用open时你的写方法使用真实的标准输出。 因此默认使用的流是NullStream(),否则它是标准输出。 检查reference source