سؤال

وأحتاج إلى الاتصال مكتبة 3rd الطرف الذي يحدث لبث حفنة من الاشياء إلى وحدة التحكم. رمز ببساطة مثل هذا ...

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