WinForms应用程序:console.writeline()输出在哪里呈现?

75

我创建了一个Windows窗体解决方案,在类的构造函数中调用了以下代码:

Console.WriteLine("constructer called")

但是我只看到了窗体,没有看到控制台输出。那么输出结果在哪里呢?


7
如果您从控制台启动exe并且不想更改应用程序清单为控制台应用程序,则以下是真正的解决方案:http://www.nerdyhearn.com/blog/157/ - v.oddou
4个回答

94

你还应该考虑使用Debug.WriteLine,这可能是你正在寻找的。这些语句会被写入应用程序的跟踪侦听器,并且可以在Visual Studio的输出窗口中查看。

Debug.WriteLine("constructor fired");

9
我一直在尝试这个,但是除了常规的“开始构建”和“构建成功”的提示之外,输出窗口从未显示任何内容。 - Kyle Delaney
1
@KyleDelaney 你有没有使用下拉菜单从“Build”切换到“Debug”输出? - Mr. TA
@Mr.TA - 我不知道,那是4年前的事了。 - Kyle Delaney
@KyleDelaney 现在怎么样? :) - Benjamin Ray
仅在调试配置下工作。 - watbywbarif

79
在项目设置中将应用程序类型设置为控制台(Console)。这样您就会得到控制台窗口和Windows表单窗口。

20

如果你在Visual Studio中运行应用程序,你可以在输出窗口中查看控制台输出。

调试 -> 窗口 -> 输出

需要注意的是,从WinForms应用程序输出诊断数据的首选方式是使用System.Diagnostics.Debug.WriteLineSystem.Diagnostics.Trace.WriteLine,因为它们更可配置,可以决定输出的方式和位置。


1
你如何配置输出的方式和位置?我已经进入了调试选项窗口,在“调试” > “输出窗口” > “常规输出设置”下,“所有调试输出”已设置为“打开”,但我仍然无法通过这些方法在输出窗口中显示任何内容。 - Kyle Delaney
@Albin:我认为这不适用于WinForms应用程序。不确定为什么你的答案被那么多人接受,因为这个问题涉及在Visual Studio中运行的WinForms(而不是控制台)应用程序。 - Jazimov

16

就像其他答案所述,System.Diagnostics.Debug.WriteLine 是调试信息的正确调用。但是回答你的问题:

从Windows窗体应用程序中,您可以按如下方式调用控制台窗口进行交互:

using System.Runtime.InteropServices;

...

void MyConsoleHandler()
{
    if (AllocConsole())
    {
        Console.Out.WriteLine("Input some text here: ");
        string UserInput = Console.In.ReadLine();

        FreeConsole();
    }
}


[DllImport("kernel32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool AllocConsole();

[DllImport("kernel32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool FreeConsole();

有时候,我会使用这个方法来打开命令提示符,而不是打开应用程序窗口,当给定某些开关时。

如果有人需要更多的想法,请参考这个类似的问题:
什么是Winforms中Console.WriteLine()的作用


1
这正是我一直在寻找的。非常感谢您发布这个,即使没有人特别要求它。 - Mr. TA

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接