Я бы определенно ограничил частоту обновления. Для таких приложений обычно достаточно одного каждые 300 мс.
Исходя из этого, хорошей реализацией будет рабочий поток, который читает последовательный порт и добавляет его в буфер. Поток пользовательского интерфейса может использовать таймер для запроса данных и обновления отображения.
Используя отдельные потоки, рабочий поток может работать с более высоким приоритетом, так что скачки нагрузки могут задерживать обновления дисплея, но данные не теряются.
Еще одна хитрость - не использовать фиксированный таймер, а перезапустить таймер после завершения обновления. Таким образом, если обновление занимает значительное время, например из-за высокой загрузки системы ваши обновления замедляются, эффективно снижая нагрузку.