문제

콘솔에 많은 물건을 뿜어내는 제 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 표준 출력, 표준 오류, 콘솔 출력 또는 콘솔 오류에 올바르게 작성하는 데 올바르게 작동하지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top