如何在控制台应用程序中隐藏输出(而不是窗口)
本文关键字:窗口 输出 隐藏 控制台 应用程序 | 更新日期: 2023-09-27 18:08:45
我再讲清楚一点。我有一个包含许多类的控制台应用程序,在每个类中至少有一个console . writeline("text")行。我定义了一些参数,在运行应用程序时,它会输出我在类中编写的内容。在这里,我想定义一个参数,当我用这个参数运行应用程序时,控制台屏幕上不会有输出,但控制台窗口仍然出现。参数可能是"-s"之类的。那么,我是否可以在不使用每个类中的"if"条件并通过类传递参数的情况下做到这一点?多谢。
p/S:我在网上搜索了一些与此相关的文章,但大多数答案都是隐藏控制台窗口。我认为这个问题应该是其他人的意思
使用控制台。SetOut (http://msdn.microsoft.com/en-us/library/system.console.setout.aspx)并传入一个"null"文本写入器。-s
执行Console.SetOut(new StreamWriter())
的构想。
Console.SetOut
方法的示例将帮助您入门。
此外,您可以使用此方法轻松添加日志记录。
如果直接传递null
,则Console.SetOut
方法抛出ArgumentNullException
;对于StreamWriter
也是一样的(如果你传递一个流或者一个字符串)
我使用的是将特殊的Stream.Null
字段传递给StreamWriter
:
System.Console.SetOut(new System.IO.StreamWriter(System.IO.Stream.Null);
这将流重定向到本质上是空设备(*NIX机器上的/dev/null
)。
使用以下方法(以编程方式)重定向输出:
Console.SetIn(...);
Console.SetOut(...);
Console.SetError(...);
app.exe > nul
将输出重定向到任何地方。仅供参考:使用命令重定向操作符
您是否遇到过Console.Clear(),您可以以一种方式调用它,使它看起来没有任何文本输出。
为了避免在每个类中单独定义this,您应该查看继承。这允许你在一个地方定义功能,每个'子'类将继承它。
您可以使用log4net来定义要记录的项目。它允许您根据日志级别、希望记录哪个类等进行日志记录。
这对于me来说非常有效!:
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
.