в этом примере открытие/закрытие порта сидит на таймере. Очень похоже на то, что если работу с портом пересадить в отдельный трид, проблемы с ошибками исчезнут. копаю дальше