如何在控制台应用程序中隐藏输出(而不是窗口)?

时间:2011-09-14 07:25:46

标签: c# command-line console console-application command-line-arguments

好吧,让我再说清楚。我有一个包含许多类的控制台应用程序,在每个类中至少有一个Console.WriteLine(“text”)行。我定义了一些参数,在运行应用程序时,它输出的正是我在类中编写的内容。在那里,我想定义一个参数,当我使用此参数运行应用程序时,控制台屏幕上将没有输出但控制台窗口仍然出现。这个论点可能就像“-s”。那么,如果不在每个类中使用“if”条件并通过类传递参数,我能做到这一点吗?非常感谢。

P / S:我通过互联网搜索并发现了一些与此相关的文章,但大多数答案都是隐藏控制台窗口。我认为这个问题应该是其他人的意思。

7 个答案:

答案 0 :(得分:7)

使用Console.SetOut(http://msdn.microsoft.com/en-us/library/system.console.setout.aspx)并传入“null”文本编写器。 -s上的想法会执行Console.SetOut(new StreamWriter())

Console.SetOut方法的示例将帮助您入门。

此外,您可以使用此方法轻松添加日志记录。

答案 1 :(得分:4)

使用这些方法重定向输出(以编程方式):

    Console.SetIn(...);
    Console.SetOut(...);
    Console.SetError(...);

答案 2 :(得分:3)

app.exe > nul

将输出重定向到无处。仅供参考:Using command redirection operators

答案 3 :(得分:3)

如果直接传递ArgumentNullExceptionConsole.SetOut方法会抛出null; StreamWriter相同(如果您pass a streampass a string

我使用的是将特殊Stream.Null字段传递给StreamWriter

System.Console.SetOut(new System.IO.StreamWriter(System.IO.Stream.Null);

这将流重定向到本质上为空设备(* NIX机器上的/dev/null)。

答案 4 :(得分:0)

您是否遇到Console.Clear(),您可以通过一种方式调用此方式,使其看起来根本没有文字输出。

至于避免在每个类中单独定义它,你应该看看继承。这允许您在一个地方定义功能,每个“子”类将继承此功能。

答案 5 :(得分:0)

您可以使用log4net来定义要记录的项目。它允许您记录有关日志级别,关于要记录的类等的日志。

答案 6 :(得分:0)

这对来说效果很好!:

Console.SetOut(StreamWriter.Null);
Console.SetError(StreamWriter.Null);

这不起作用:

Console.SetOut(null);
Console.SetError(null);

结果为ArgumentNullException

这不起作用:

Console.SetOut(new StreamWriter(null));
Console.SetError(new StreamWriter(null));

因为new StreamWriter(string path)new StreamWriter(Stream stream)之间不明确。

最后 ,这些都不起作用:

Console.SetOut(new StreamWriter(default(string)));
Console.SetError(new StreamWriter(default(Stream)));

因为它们也会产生ArgumentNullException