Перенаправление Консольного Вывода к winforms ListBox

Assembly assembly = Assembly.GetExecutingAssembly();
List<Type> types = assembly.GetTypes();
List<Type> childTypes = new List<Type>();
foreach (Type type in Types) {
  foreach (Type interfaceType in type.GetInterfaces()) {
       if (interfaceType.Equals(typeof([yourinterfacetype)) {
            childTypes.Add(type)
            break;
       }
  }
}

, Возможно, что-то как этот....

5
задан Fusspawn 23 November 2009 в 00:51
поделиться

2 ответа

Другой, вероятно, более чистый способ сделать это - расширить TextWriter своим собственным, который ведет журнал туда, куда вы хотите.

Примечание: я не тестировал это.

public class ListBoxWriter : TextWriter
{
    private ListBox list;
    private StringBuilder content = new StringBuilder();

    public ListBoxWriter(ListBox list)
    {
        this.list = list;
    }

    public override void Write(char value)
    {
        base.Write(value);
        content.Append(value);
        if (value == '\n')
        {
            list.Items.Add(content.ToString());
            content = new StringBuilder();
        }
    }

    public override Encoding Encoding
    {
        get { return System.Text.Encoding.UTF8; }
    }
}
12
ответ дан 18 December 2019 в 11:57
поделиться

Вместо того, чтобы пытаться «захватить» текст, отправленный на консоль, я бы создал новый класс, который обрабатывает вывод для вас. Затем этот новый класс может записывать данные в консоль, а также в любое другое место, куда вы хотите.

Если вы используете класс .NET Debug, просто используйте два слушателя: ConsoleTraceListener и TextWriterTraceListener.

Чтобы сделать ваш существующий код работает, добавьте:

writer.Flush();

после вызовов Console.WriteLine ().

3
ответ дан 18 December 2019 в 11:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: