Поэтому я хочу перенаправить вывод моей консоли в TextBox для имитации консоли в графическом интерфейсе. Теперь я увидел этот пост:
https://stackoverflow.com/a/18727100/6871623
Что помогает процессу перенаправления.
Однако, поскольку строка неизменна, это означает, что новая строка будет выделяться при каждой записи, и это не очень эффективно.
Поэтому я подумал об использовании StringBuilder как:
public class ControlWriter : TextWriter
{
private Control textbox;
private StringBuilder builder;
public ControlWriter(Control textbox)
{
this.textbox = textbox;
builder = new StringBuilder();
}
public override void Write(char value)
{
builder.Append(value);
textbox.Text = builder.ToString();
}
public override void Write(string value)
{
builder.Append(value);
textbox.Text = builder.ToString();
}
public override Encoding Encoding
{
get { return Encoding.ASCII; }
}
}
Глядя на код, он, похоже, не сильно повышает производительность, поскольку новая строка будет выделяться каждый раз, когда мы вызываем builder.ToString()
, главным образом то, что мы улучшаем, это часть Append
, поскольку теперь мы не будем использовать строку concat каждый раз.
Есть ли способ привязать TextBox Text
непосредственно к StringBuilder
? То есть добавление или сброс StringBuilder
будет автоматически отражаться в графическом интерфейсе?
Если это невозможно для TextBox, есть ли другой способ обойти это?
Наконец, есть ли способ улучшить производительность кода выше?