제 3 자 도서관 콘솔 출력을 억제합니까?
-
05-07-2019 - |
문제
콘솔에 많은 물건을 뿜어내는 제 3 자 도서관에 전화해야합니다. 코드는 단순히 이렇게 ...
int MyMethod(int a)
{
int b = ThirdPartyLibrary.Transform(a); // spews unwanted console output
return b;
}
ThirdPartylibrary에서 원치 않는 콘솔 출력을 억제하는 쉬운 방법이 있습니까? 성능의 이유로 솔루션에는 새로운 프로세스 또는 스레드를 사용할 수 없습니다.
해결책
글쎄, 당신은 사용할 수 있습니다 Console.SetOut
구현에 TextWriter
아무데도 쓰지 않는다 :
Console.SetOut(TextWriter.Null);
그것은 억압 될 것입니다 모두 그래도 콘솔 출력. 항상에 대한 참조를 유지할 수 있습니다 원래의 Console.Out
작가와 자신의 출력에 사용하십시오.
다른 팁
다음은이를 수행하는 한 가지 방법입니다 (일반적으로 C# 또는 다른 방식으로 P/호출하는 관리 된 C ++ 응용 프로그램을 다루는 것도 다음과 같습니다.
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);
}
}
이 클래스는 다음과 같이 호출 할 수 있습니다.
using (new OutputSink())
{
/* Call 3rd party library here... */
}
이것은 영향을 미칩니다. 시간 동안 다른 스레드에서 콘솔을 사용하려는 응용 프로그램 논리 using
그만큼 OutputSink
표준 출력, 표준 오류, 콘솔 출력 또는 콘솔 오류에 올바르게 작성하는 데 올바르게 작동하지 않습니다.
제휴하지 않습니다 StackOverflow