Suprimir 3ª saída do console biblioteca festa?
-
05-07-2019 - |
Pergunta
Eu preciso chamar uma biblioteca parte 3 que acontece a vomitar um monte de coisas para o console. O código simplesmente assim ...
int MyMethod(int a)
{
int b = ThirdPartyLibrary.Transform(a); // spews unwanted console output
return b;
}
Existe uma maneira fácil para suprimir a saída do console indesejada de ThirdPartyLibrary? Por motivos de desempenho, novos processos ou threads não pode ser usado na solução.
Solução
Bem, você pode usar Console.SetOut
para uma implementação de TextWriter
que não escrever em qualquer lugar:
Console.SetOut(TextWriter.Null);
que suprimem vontade todas saída do console embora. Você pode sempre manter uma referência para o ORIGINAL escritor Console.Out
e uso que para a sua própria saída.
Outras dicas
Aqui está uma maneira de fazê-lo (que também normalmente cobre conseguiu aplicações C ++ que você P / Invoke de C # ou não):
internal class OutputSink : IDisposable
{
[DllImport("kernel32.dll")]
public static extern IntPtr GetStdHandle(int nStdHandle);
[DllImport("kernel32.dll")]
public static extern int SetStdHandle(int nStdHandle, IntPtr hHandle);
private readonly TextWriter _oldOut;
private readonly TextWriter _oldError;
private readonly IntPtr _oldOutHandle;
private readonly IntPtr _oldErrorHandle;
public OutputSink()
{
_oldOutHandle = GetStdHandle(-11);
_oldErrorHandle = GetStdHandle(-12);
_oldOut = Console.Out;
_oldError = Console.Error;
Console.SetOut(TextWriter.Null);
Console.SetError(TextWriter.Null);
SetStdHandle(-11, IntPtr.Zero);
SetStdHandle(-12, IntPtr.Zero);
}
public void Dispose()
{
SetStdHandle(-11, _oldOutHandle);
SetStdHandle(-12, _oldErrorHandle);
Console.SetOut(_oldOut);
Console.SetError(_oldError);
}
}
Esta classe pode ser chamado como segue:
using (new OutputSink())
{
/* Call 3rd party library here... */
}
Isto terá um impacto. Qualquer lógica de aplicação que tenta usar o console de outro segmento durante o tempo que você está using
o OutputSink
não funcionará corretamente para escrever para a saída padrão, erro padrão, a saída do console, ou erro console.