TextBox Text Management - PullRequest
       22

TextBox Text Management

1 голос
/ 04 февраля 2012

У меня есть приложение WPF, в котором я пытаюсь создать «панель диагностики», которая очень похожа на «Окно вывода» в Visual Studio 2010. Оно просто содержит текстовое поле, в котором все типы вывода собираются и добавляются в текстовое поле с использованием метода .AppendText().

У нас есть пара клиентов, которые постоянно отключают эту панель диагностики и никогда не очищают ее. В результате отображается очень большое количество текста, поскольку новые данные продолжают поступать ...

В WPF TextBox есть свойство MaxLength, которое я оставляю равным 0. Согласно документации MSDN, «Когда это свойство имеет значение 0, максимальная длина текста, который может быть введен в элемент управления, ограничена только доступным память. "

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

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

Есть мысли?

Спасибо!

Ответы [ 3 ]

0 голосов
/ 04 февраля 2012

Вот как вы справляетесь с этим:

  1. Запись информации журнала в текстовый файл
  2. Запишите информацию журнала в ваше текстовое поле (хотя я не люблю текстовые поля, все должно быть в порядке.)
  3. При записи в текстовое поле отображаются только последние, может быть, 20 или около того (поиграйте с этим) строк. Все остальное должно «скатиться»

Если ваши пользователи действительно хотят сохранить все, не важно, оно уже сохранено в этот файл.

При каждом запуске приложения или через определенный промежуток времени переходите к новому файлу.

0 голосов
/ 04 февраля 2012

Почему бы не использовать список, в котором каждое предложение получает свой собственный текстовый блок - так что вы можете получить виртуализацию?http://social.msdn.microsoft.com/Forums/en/wpf/thread/98090161-0abf-4799-bbcb-852dcc0f0608

0 голосов
/ 04 февраля 2012

В вашем коде может быть DispatcherTimer.Благодаря этому вы можете установить его на Tick каждые 10 минут (или любой другой период времени, который вы хотите).А в методе обработчика событий Tick вы можете взять текст в текстовом поле, выбросить весь текст, кроме объема, который вы хотите сохранить, а затем установить этот текст обратно в текстовое поле.

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

Документация DispatcherTimer

Как сказал Xaisoft, вам не следует использовать TextBox для этого, вероятно, TextBlockвместо.Возможно, вам придется поместить это в ScrollViewer, я не помню.

...