Как реализовать буферный вывод в Windows Forms?

При написании приложения с использованием Windows Forms понадобилось реализовать вывод лога приложения подобный консольному. Изначально был поставлен RichTextBox и туда сбрасывалась информация, но проблема в том, что вывод крайне обширен и достигает очень больших объемов за короткое время.

По всей видимости в виду статичности строк в .NET приложение мгновенно умирает, так как рантайм занимается только тем, что пересоздает строки огромного размера в RichTextBox (что даже если бы и работало корректно, было бы нерационально, так как к многометровым полотнам добавлялись бы 40-50 символьные строчки).

Встает вопрос, как реализовать вывод, аналогичный консольному, в Windows Forms (без пересоздания одной большой строки) элементах? Возможно можно как-то вставить непосредственно консоль внутри формы?
  • Вопрос задан
  • 247 просмотров
Пригласить эксперта
Ответы на вопрос 3
@Sumor
Откройте для себя Debug и Trace
При загрузке приложения можно присоединиться к Listeners своим потоком, а потом по таймеру считывать дельту лога.
Методы Debug работают в дебагерной версии, методы Trace работают и в дебаге и в релизе.
Ответ написан
Комментировать
lasalas
@lasalas
.NET Architect
Используй ListBox или ListView.
Ответ написан
Комментировать
@den_labs
Да, посмотрите в сторону ListView, при VirtualMode = true.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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