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

时间:2012-03-30 12:35:07

标签: c#

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

4 个答案:

答案 0 :(得分:12)

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

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

VS Project settings

答案 1 :(得分:3)

如果您有控制台应用程序,请执行

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

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

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

答案 2 :(得分:3)

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

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

答案 3 :(得分:2)

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