Пользовательский текстовый редактор для выходного потока консоли не работает во внешних классах

Я пытаюсь переслать Console вывод в Windows Forms TextBox контроль. Поэтому я прикрепил кастом TextWriter к Console который добавляет вывод к TextBox,

Но я думаю, что TextWriter или же TextBox недоступен изнутри внешнего класса. Как это исправить? Проверьте мой код ниже:

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.'");
  }
}

1 ответ

Решение

Как я выяснил после экспериментов, у этой проблемы была другая причина, чем я ожидал. В моей программе я использовал Console.Clear() удалить все напечатанные строки, но, по-видимому, это также уничтожает ссылку на поток вывода пользовательского набора.

И это не очистит TextBox в конце концов, я должен использовать TextBox.Clear(),

Я прошу прощения за это, потому что мой вопрос не к сути в этом случае, проблема, казалось, лежит где-то еще. На самом деле, код в моем вопросе работает отлично, потому что нет вызова Console.Clear(), но я просто еще не выяснил, что на самом деле вызвало проблему.

Реальный вопрос будет: как "переопределить" Console.Clear() чтобы очистить TextBox? Но это для другой темы.

Другие вопросы по тегам