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

时间:2010-06-16 23:16:28

标签: c# wpf command-line console

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

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

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

据我所知,它可能与Console.SetOut(TextWriter t)有关

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

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

4 个答案:

答案 0 :(得分:31)

这实际上是微不足道的:

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

    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所有。