如何检查是否使用我的TextWriter设置了Console.Out

时间:2015-01-08 12:37:10

标签: c# streamwriter

我将控制台更改为自定义TextWriterclass(TextBoxStreamWriter)。我想检查是否使用我的编写器实例设置了Console.Out(因为其他类可能已经更改了它等)。

样品:

// "TextBoxStreamWriter : TextWriter" is a custom class that writes to a textbox...
TextBoxStreamWriter myWriter = new TextBoxStreamWriter(someTextBoxInstance);
Console.SetOut(myWriter);
bool check = Console.Out == myWriter;
// But check is false! I need to know if .Out was set from my custom class or not.

2 个答案:

答案 0 :(得分:1)

Console.SetOutmyWriter包裹在另一个TextWriter中,通过将所有调用包装在lock中来使其保持线程安全。这就是您在检查Console.Out == myWriter;

时出错的原因

你需要一些反射代码来检查它,因为包装TextWriter是内部的。它被命名为SyncTextWriter

您可以参考source here了解更多信息。

答案 1 :(得分:0)

这是预期的,请查看Console.SetOut源代码:http://referencesource.microsoft.com/#mscorlib/system/console.cs,2d6029756ecc3409。它将您的文本编写器包装在SyncTextWriter

我认为你必须使用反射来查看包装类型。