> -- Vlad писал(а):
> Кода, непосредственно работающего с COM-портом я так и не увидел.
Какой вы скучный товарищ! Самая суть вопроса, использовать или не использовать нити, заключается в способе периодического получения новых данных, не так ли? Нить использовать "проще" потому, что там можно написать "глухой" цикл, не берущий в расчет параллельно выполняемые задачи. Кооперативная многозадачность "сложнее" потому, что цикл приходится делать "открытым", постоянно самовозобновляемым на каждой итерации. Я вам продемонстрировал, что такой открытый цикл очень просто реализуется на основе Services.Action. Нет нужды ничего блокировать, нет и дополнительной сложности в реализации клиентского кода.

Чтож, если вас в самом деле интересуют технические детали работы непосредственно с портом, то пожалуйста.

Вы знакомы с модулем CommV24? Это стандартный модуль для работы с COM-портами, входящий в поставку BlackBox. В ту же ветку "Последовательные коммуникации" я выложил слегка доработанный мною вариант этого модуля. Доработка сводится к возможности создания потока CommStreams.Stream для работы с портом. CommAction далее использует этот (или любой другой) поток.

В результате одна и та же программа может без перекомпиляции работать как с любым COM-портом, так и через TCP/IP или что угодно еще, для чего напишете драйвер на основе CommStreams.