如何从Windows应用程序写入控制台窗口?

有没有想过如何从Windows应用程序写入单独的控制台窗口而不是写入日志文件? 出于多种原因,您可能需要这样做 – 主要与调试有关。

要以编程方式执行此操作,您可以在自己的代码中PInvoke相应的Win32控制台function(例如, AllocConsole创建您自己的或AttachConsole以使用其他进程)。 通过这种方式,您可以最好地控制实际发生的情况。

如果您可以在流程的整个生命周期内将控制台窗口与其他UI一起打开,则只需在Visual Studio中更改项目属性,然后选择“控制台应用程序”,简单如下:

VS项目设置

如果你有控制台应用程序,那么

 System.Console.WriteLine("What ever you want"); 

如果您有表单应用程序,则需要先创建控制台:

http://www.csharp411.com/console-output-from-winforms-application/

以下是您的操作方法:kernel32.dll中提供了预定义的API,允许您写入控制台。 以下显示了该function的示例用法。

 private void button1_Click(object sender, EventArgs e) { new Thread(new ThreadStart(delegate() { AllocConsole(); for (uint i = 0; i < 1000000; ++i) { Console.WriteLine("Hello " + i); } FreeConsole(); })).Start(); } 

您需要从kernel32.dll导入AllocConsole和FreeConsole API。

 [DllImport("kernel32.dll")] public static extern bool AllocConsole(); [DllImport("kernel32.dll")] public static extern bool FreeConsole(); 

如果你只想在调试时使用它,你总是可以使它成为条件。

 private void button1_Click(object sender, EventArgs e) { new Thread(new ThreadStart(delegate() { AllocateConsole(); for (uint i = 0; i < 1000000; ++i) { Console.WriteLine("Hello " + i); } DeallocateConsole(); })).Start(); } [Conditional("DEBUG")] private void AllocateConsole() { AllocConsole(); } [Conditional("DEBUG")] private void DeallocateConsole() { FreeConsole(); } 

您可以使用kernel32.dll从Windows窗体应用程序控制输出。 有关详细信息,请查看本文 。