gpt4 book ai didi

c# - 从 WPF Windows 应用程序到实际控制台的输出 Console.WriteLine

转载 作者:IT王子 更新时间:2023-10-29 04:16:15 33 4
gpt4 key购买 nike

背景:我正在努力将命令行和批处理功能添加到现有的 WPF Windows 应用程序。当我在启动时检测到一些选项时,我会抑制窗口出现,进行一些处理并立即退出。现在,因为没有 UI,所以我想将一些消息输出到 stdout/stderr。考虑以下代码:

namespace WpfConsoleTest
{
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
Console.WriteLine("Start");
System.Threading.Thread.Sleep(1000);
Console.WriteLine("Stop");
Shutdown(0);
}
}
}

当我从命令行运行时,我期望得到以下输出:

Start
Stop

而是:

C:\test>WpfConsoleTest.exe

C:\test>

不过,您可以重定向输出:

C:\test>WpfConsoleTest.exe > out.txt

C:\test>type out.txt
Start
Stop

不幸的是,重定向到 CON 不起作用:

C:\test>WpfConsoleTest.exe > CON

C:\test>

另一个问题是 WpfConsoleTest.exe 在启动后立即退出。所以:

C:\test>WpfConsoleTest.exe > out.txt & type out.txt

C:\test>

但是:

C:\test>WpfConsoleTest.exe > out.txt & ping localhost > nul & type out.txt
Start
Stop

到目前为止我能想到的最好的解决方案是使用start/B/wait:

C:\test>start /B /wait WpfConsoleTest.exe > out.txt & type out.txt
Start
Stop

这种方法基本上没问题——如果你把它包装在一个 bat 中,你可以保留错误代码等等。一个巨大的失败是您在应用程序结束后获得输出,即您无法跟踪进度,您必须等待任何正在发生的事情完成。

因此,我的问题是:如何从 WPF Windows 应用程序输出到父控制台?另外,为什么很难从 WPF 获取标准输出/标准错误?

我知道我可以在项目设置中将应用程序类型更改为控制台应用程序,但这有一个令人讨厌的副作用 - 控制台窗口始终可见,即使您只是双击 exe。 This solution也不会这样做,因为它会创建一个新的控制台,即使应用程序是从 cmd 运行的。

编辑:澄清一下,如果有控制台,我希望我的应用输出到现有控制台,如果缺少控制台,则创建一个新控制台。

最佳答案

深入挖掘后,我找到了this answer .现在的代码是:

namespace WpfConsoleTest
{
public partial class App : Application
{
[DllImport("Kernel32.dll")]
public static extern bool AttachConsole(int processId);

protected override void OnStartup(StartupEventArgs e)
{
AttachConsole(-1);
Console.WriteLine("Start");
System.Threading.Thread.Sleep(1000);
Console.WriteLine("Stop");
Shutdown(0);
}
}
}

直接调用 exe 仍然有一个令人讨厌的副作用,与立即返回的调用连接:

C:\test>WpfConsoleTest.exe

C:\test>Start
Stop

^^^^
The cursor will stay here waiting for the user to press enter!

解决方案还是使用start:

C:\test>start /wait WpfConsoleTest.exe
Start
Stop

感谢输入!

关于c# - 从 WPF Windows 应用程序到实际控制台的输出 Console.WriteLine,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10415807/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com