首页 > 解决方案 > 控制台输出流的自定义文本编写器在外部类中不起作用

问题描述

我正在尝试将Console输出转发到 Windows 窗体TextBox控件。所以我附加了一个自定义TextWriterConsole它将输出附加到TextBox.

但我认为TextWriterorTextBox在外部类中是不可访问的。如何解决这个问题?在下面检查我的代码:

partial class Form1 : Form
{
  public StringWriter _TextWriter;

  public Form1()
  {
    InitializeComponent();

    this._TextWriter = new TextBoxStreamWriter(this.textBox1);
    Console.SetOut(this._TextWriter);

    Console.WriteLine("This text does appear in the TextBox, works perfect.");

    Test ConsoleOutputExternalClass = new Test();
  }
}

public class TextBoxStreamWriter : StringWriter
{
  TextBox _output = null;

  public TextBoxStreamWriter(TextBox output)
  {
    this._output = output;
  }

  public override void WriteLine(string value)
  {
    base.WriteLine(value);
    this._output.AppendText(value.ToString());
  }

  public override Encoding Encoding
  {
    get
    {
      return Encoding.UTF8;
    }
  }
}

private class Test
{
  public Test()
  {
    // HERE I GET AN EXCEPTION ERROR !!
    Console.WriteLine("System.IO.IOException: 'The handle is invalid.'");
  }
}

标签: c#winformsiowindows-consoletextwriter

解决方案


正如我在实验后发现的那样,这个问题的原因超出了我的预期。在我的程序中,我曾经Console.Clear()删除所有打印的行,但显然这也会破坏到自定义设置输出流的链接。

毕竟这不会清除 TextBox,我应该使用TextBox.Clear().

对此我很抱歉,因为在这种情况下我的问题不是重点,问题似乎出在其他地方。事实上,我问题中的代码确实可以完美运行,因为没有调用Console.Clear(),但我只是还没有找出真正导致问题的原因。

真正的问题是:如何“覆盖”Console.Clear()以清除 TextBox?但这是另一个话题。


推荐阅读