Frage

Ich brauche eine 3rd-Party-Bibliothek aufrufen, die ein paar Sachen an die Konsole spucken geschieht. Der Code einfach so ...

int MyMethod(int a)
{
   int b = ThirdPartyLibrary.Transform(a);  // spews unwanted console output
   return b;
}

Gibt es einen einfachen Weg, um die unerwünschte Konsolenausgabe von ThirdPartyLibrary zu unterdrücken? Aus Performance-Gründen neue Prozesse oder Threads nicht in der Lösung verwendet werden.

War es hilfreich?

Lösung

Nun können Sie Console.SetOut auf eine Implementierung von TextWriter benutzen, die nicht überall schreiben:

Console.SetOut(TextWriter.Null);

Das wird unterdrücken alle Konsolenausgabe though. Sie können immer einen Verweis auf die Original Console.Out Schriftsteller halten und verwenden, die für die eigene Ausgabe.

Andere Tipps

Hier ist eine Möglichkeit, es zu tun (welche auch in der Regel deckt verwaltete C ++ Anwendungen, die Sie P / Invoke von C # oder auf andere Weise):

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);
    }
}

Diese Klasse kann wie folgt aufgerufen werden:

using (new OutputSink())
{
    /* Call 3rd party library here... */
}

Dies wird Auswirkungen haben. Jede Anwendungslogik, die die Konsole von einem anderen Thread während der Zeit versucht, verwenden Sie die using OutputSink sind nicht richtig funktionieren auf die Standardausgabe, Standardfehler, Konsolenausgabe oder Konsole Fehler zu schreiben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top