抑制第三方库控制台输出?我需要调用一个恰好向控制台吐出一堆东西的第3方库。代码是这样的...intMyMethod(inta){intb=ThirdPartyLibrary.Transform(a);//喷出不需要的控制台输出returnb;有没有一种简单的方法可以抑制ThirdPartyLibrary中不需要的控制台输出?出于性能原因,解决方案中不能使用新进程或线程。好吧,您可以将Console.SetOut用于TextWriter,它不会在任何地方写入:Console.SetOut(TextWriter.Null);这将抑制所有控制台输出。您始终可以维护对原始Console.Out的引用并将其用于您自己的输出。这是一种方式(通常也在您从C#或其他方式调用的托管C++应用程序中):[DllImport("kernel32.dll")]publicstaticexternintSetStdHandle(intnStdHandle,IntPtrhHandle);私人只读TextWriter_oldOut;私人只读TextWriter_oldError;私有只读IntPtr_oldOutHandle;私有只读IntPtr_oldErrorHandle;公共OutputSink(){_oldOutHandle=GetStdHandle(-11);_oldErrorHandle=GetStdHandle(-12);_oldOut=控制台输出;_oldError=Console.Error;Console.SetOut(TextWriter.Null);Console.SetError(TextWriter.Null);SetStdHandle(-11,IntPtr.Zero);SetStdHandle(-12,IntPtr.Zero);}publicvoidDispose(){SetStdHandle(-11,_oldOutHandle);SetStdHandle(-12,_oldErrorHandle);控制台.SetOut(_oldOut);Console.SetError(_oldError);}}这个类可以这样调用:using(newOutputSink()){/*Call3rdpartylibraryhere...*/}这样会有效果。在您使用OutputSink时尝试从另一个线程使用控制台的任何应用程序逻辑将无法正确写入标准输出、标准错误、控制台输出或控制台错误。以上就是C#学习教程:抑制第三方库控制台输出?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
