2013-06-19 3 views
0

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

Программа добавляет 1 строку к нижней для каждого нового пакета.

В настоящее время я использую TextBox для скорости, так как я получаю около 600-2200 пакетов каждую минуту, и RTB просто не может следовать.

i снимите верхнюю линию, когда линии [] превышают 300 строк, чтобы уменьшить использование памяти и уменьшить скорость.

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

как тариф, как я знаю, есть только метод Select для цветного текста в RTB, однако мне было интересно, если бы был какой-то компонент, который лучше использовать, то стандартный RTB, который был более надежным, RTB?

+0

Нет человека может читать 37 сообщений в секунду, это просто выглядит как размытие. Попытка сделать это быстрее бессмысленна, она будет более размытой и менее пригодной для использования. Создайте * практический * пользовательский интерфейс, и ваша проблема с RTB также исчезнет. –

+0

, возможно, вы правы. Я был ленив, чтобы увидеть необходимость в новом графическом интерфейсе. Основная проблема: ... Протокол Я читаю удаленные журналы, имею более 1000 разных пакетов, и я только определил и успешно проанализировал 60 из них. Остальное читается сырым байтом для читателя ascii. Основная причина, по которой я сейчас использую текстовое поле, - это получить представление о том, что программа делает с данными, и как я должен продолжать их читать. Однако я должен проворно начать записывать их в файловые журналы, а не – Droa

ответ

1

Я думаю, что лучшим решением было бы иметь промежуточный буфер (очередь) для хранения информации, собранной из пакетов.

Dim _buffer as New List(Of String) 

Когда новый пакет прибывает добавить его в конце буфера:

_buffer.Add("package contents") 

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

Private Event Timer_Tick 
    Do Until _buffer.Count = 0 
     rtb.Text += _buffer(0) 
     'colourise the textbox 
     _buffer.RemoveAt(0) 
    Loop 
End Sub 

Вы можете столкнуться с проблемами чтения и записи в буфер на отдельные потоки, в этом случае вы можете попробовать использовать SyncLock, но это может заставить вас идти на текущий

+0

, и способ использования suspendlayout и resumelayout может быть удобным :) – Droa

Смежные вопросы