嗨,我知道如何写入控制台,但如果我在程序中写入控制台并从命令行调用我的程序,它将不会显示任何内容。
当我说Console.WriteLine或Console.Out.Writeline ir打印到调用它的命令提示符而不是其他地方时,我该怎么做呢?
我再一次知道怎么做Console.WriteLine所以不是这样的:-p除非我做错了。
据我所知,它可能与Console.SetOut(TextWriter t)有关
这是一个WPF应用程序,我需要它将其数据发布到命令行,同时仍然在启动时保留GUI。我已经三次检查并且我的代码命中了打印行,我实际上可以看到正在打印到Visual Studio输出窗口的行,当我在没有VS的情况下手动运行它时,它就不会显示在命令行中。
如果可能,我需要有条件地拥有控制台显示器。即如果从命令行运行(或甚至使用命令参数),则显示或发布到提示符,否则不显示。
答案 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所有。