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

C# 如何在控制台应用程序中隐藏输出(而不是窗口)?,c#,command-line,console,console-application,command-line-arguments,C#,Command Line,Console,Console Application,Command Line Arguments,好吧,让我再说清楚。我有一个包含许多类的控制台应用程序,每个类中至少有一个console.WriteLine(“text”)行。我定义了一些参数,当运行应用程序时,它会准确地输出我在类中编写的内容。在这里,我想定义一个参数,当我用这个参数运行应用程序时,控制台屏幕上不会有输出,但控制台窗口仍然会出现。这个论点可能类似于“-s”。那么,有没有任何方法可以做到这一点,而不必在每个类中使用“if”条件并通过类传递参数?非常感谢 p/S:我在互联网上搜索过,找到了一些与此相关的文章,但大多数答案都是隐藏

好吧,让我再说清楚。我有一个包含许多类的控制台应用程序,每个类中至少有一个console.WriteLine(“text”)行。我定义了一些参数,当运行应用程序时,它会准确地输出我在类中编写的内容。在这里,我想定义一个参数,当我用这个参数运行应用程序时,控制台屏幕上不会有输出,但控制台窗口仍然会出现。这个论点可能类似于“-s”。那么,有没有任何方法可以做到这一点,而不必在每个类中使用“if”条件并通过类传递参数?非常感谢

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

如果你遇到过,你可以这样称呼它,使它看起来根本没有文本输出

为了避免在每个类中单独定义它,您应该查看继承。这允许您在一个地方定义功能,并且每个“子”类将继承该功能

app.exe > nul

将输出重定向到别处。仅供参考:

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

使用Console.SetOut()并传入一个“null”文本编写器。在
-s
上执行
控制台。放样(新StreamWriter())

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

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

您可以使用此方法定义要记录的项目。它允许您记录日志级别、要记录的类等

如果直接传递
null
,该方法将抛出
ArgumentNullException
;同样适用于
StreamWriter
(如果您或

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

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

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

这对me非常有效:

Console.SetOut(StreamWriter.Null);
Console.SetError(StreamWriter.Null);
这不起作用:

Console.SetOut(null);
Console.SetError(null);
Console.SetOut(new StreamWriter(null));
Console.SetError(new StreamWriter(null));
它会导致
ArgumentNullException

这不起作用:

Console.SetOut(null);
Console.SetError(null);
Console.SetOut(new StreamWriter(null));
Console.SetError(new StreamWriter(null));
因为
新建StreamWriter(字符串路径)
新建StreamWriter(Stream Stream)
之间不明确

最后,这两项都不起作用:

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

因为它们还会导致
ArgumentNullException

您可以在应用程序主函数中解析输入-s,然后使用控制台类方法将控制台输出重定向到文件,例如,而不是屏幕。通常,您应该使用调试/跟踪来控制这种行为。@Artur:实际上,我不希望控制台输出到任何ot她的档案,我只是想“隐藏”输出,但我仍然需要一些文本显示在控制台屏幕上,而不是隐藏所有内容。AMisssico的回答解决了我的这个问题,我只需要将输出流设置为空TextWriter,然后在需要时设置回标准输出流。@sajoshi:我不太理解你的建议。在这种情况下调试/跟踪是如何工作的?我我不知道为什么要隐藏输出。我的理解是,您正在输出信息,以便获得一些跟踪信息。+1我很确定他是想用代码解决问题,但这真的很酷:Dsorry,但我真的想传入一个参数,以便我可以定义自己的参数。此外,我仍然希望o输出一些文本,例如“在静默模式下运行…”或者,如果你将输出重定向到任何地方,所有的输出都不会再出现。好提示!好资源链接。我也喜欢你的答案。但AMissico的答案更详细。无论如何,谢谢^^。我从事的项目属于以前的团队,而不是新团队。如果我必须修改所有的类,这将是一场灾难。当输出是从第三方库提供的,或者是从我的代码开始的过程?为谁?:)无论如何,您能添加更多的细节并解释一下您的答案背后的原因吗?它可以帮助海报更好地理解您的答案…虽然此代码可以回答问题,但提供有关此代码回答问题的原因和/或方式的其他上下文可以提高其长期价值。没有意义,因为接受的答案显示使用了新的StreamWriter(),而新的StreamWriter()并不存在。