如何从WPF应用程序写入命令行?

嗨,我知道如何写入控制台,但如果我在程序中写入控制台并从命令行调用我的程序,它将不会显示任何内容。

当我说Console.WriteLine或Console.Out.Writeline ir打印到调用它的命令提示符而不是其他地方时,我该怎么做呢?

我再一次知道怎么做Console.WriteLine所以不是这样的:-p除非我做错了。

从我可以告诉它可能与Console.SetOut(TextWriter t)有关

这是一个WPF应用程序,我需要它将其数据发布到命令行,同时仍然在启动时保留GUI。 我已经三次检查并且我的代码命中了打印行,我实际上可以看到正在打印到Visual Studio输出窗口的行,当我在没有VS的情况下手动运行它时,它不会显示在命令行中。

如果可能,我需要有条件地拥有控制台显示器。 即如果从命令行运行(甚至使用命令参数),则显示或发布到提示符,否则不显示。

将项目类型设置为“控制台应用程序”而不是“Windows应用程序”。 这将导致应用程序附加到启动它的控制台(或者如果没有控制台,则创建一个控制台)。

这实际上是微不足道的:

public void WriteToConsole(string message) { AttachConsole(-1); Console.WriteLine(message); } [DllImport("Kernel32.dll")] public static extern bool AttachConsole(int processId); 

如果您的程序是从命令行启动的,则此方法会将您的消息写入控制台,否则它将不执行任何操作。

如果要在未从命令行启动时使用备用输出机制,可以这样做:

 public void WriteToConsole(string message) { _connected = _connected || AttachConsole(-1); if(_connected) Console.WriteLine("Hello"); else ... other way to output message ... } bool _connected; [DllImport("Kernel32.dll")] public static extern bool AttachConsole(int processId); 

这应该工作得很好,双重和三重检查你做了什么,如果可能的话发布你的代码。 您可以查看项目属性并检查输出类型是否设置为“控制台应用程序”(我相信它仍然调用它:oP)

此特定任务的完整代码是:

  public static void WriteToConsole(string message) { AttachConsole(-1); System.Console.WriteLine(message); SendKeys.SendWait("{ENTER}"); FreeConsole(); } [DllImport("Kernel32.dll")] private static extern bool AttachConsole(int processId); [DllImport("kernel32.dll")] private static extern bool FreeConsole(); 

所有学分都归Ray Burns和Scott Marlowe所有。