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