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

本文关键字:窗口 输出 隐藏 控制台 应用程序 | 更新日期: 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 .