C# 如何从windows应用程序写入控制台窗口?

C# 如何从windows应用程序写入控制台窗口?,c#,C#,有没有想过如何从Windows应用程序中写入一个单独的控制台窗口,而不是写入日志文件?您可能需要这样做,原因有很多,主要是与调试有关。您可以使用kernel32.dll从Windows窗体应用程序控制台输出。要完成详细信息检查。要以编程方式执行此操作,您可以从自己的代码中PInvoke相应的Win32控制台函数(例如,创建自己的或使用其他进程的)。这样你就可以最好地控制实际发生的事情 private void button1_Click(object sender, EventArgs e) {

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

您可以使用kernel32.dll从Windows窗体应用程序控制台输出。要完成详细信息检查。

要以编程方式执行此操作,您可以从自己的代码中PInvoke相应的Win32控制台函数(例如,创建自己的或使用其他进程的)。这样你就可以最好地控制实际发生的事情

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();
}
如果您同意在整个流程生命周期中将控制台窗口与其他UI一起打开,则只需在Visual Studio中更改项目属性并选择“控制台应用程序”,简单如下:


如果您有控制台应用程序,请执行以下操作

System.Console.WriteLine("What ever you want");
如果您有表单应用程序,则需要首先创建控制台:

以下是您的操作方法: 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();
}
如果只想在调试时使用它,则可以始终将其设置为有条件的

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();
}
private void按钮1\u单击(对象发送者,事件参数e)
{
新线程(新线程开始(委托)()
{
AllocateConsole();
对于(uint i=0;i<1000000;++i)
{
Console.WriteLine(“你好”+i);
}
解除分配控制台();
})).Start();
}
[有条件的(“调试”)]
私有void AllocateConsole()
{
allocsole();
}
[有条件的(“调试”)]
私有void DeallocateConsole()
{
FreeConsole();
}

您能否指定“Windows应用程序”的含义?Windows窗体应用程序或其他应用程序?将项目类型从WinForms更改为Console应用程序。现在你们两个都有了。表单+控制台不是真的,当我可以输出到GUI表单上的文本框或备忘录组件时就不行了。实际解决方案:微软把Unix世界中如此单纯和简单的东西变得如此复杂,真是不可思议。