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

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

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

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

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

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

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

  Console.SetIn(...); Console.SetOut(...); Console.SetError(...); 
 app.exe > nul 

将输出重定向到无处。 仅供参考: 使用命令重定向运算符

如果直接传递nullConsole.SetOut方法抛出ArgumentNullException ; 对于StreamWriter (如果您传递流或者传递字符串 。

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

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

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

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

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

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

这对我来说效果很好!:

 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