2015-08-19 1 views
-1

В связи с последовательным портом мое требование - отправить & принимать сразу несколько сигналов одновременно. Я использовал концепцию Threading, когда один поток работает с последовательным портом - режим открыт для чтения, он работает нормально, но когда я попытался выполнить второй поток для отправки данных в com-порт. Здесь я получаю сообщение об ошибке -Последовательный порт: можно отправлять и принимать сразу несколько сигналов за один раз

Exception Type = "System.UnauthorizedAccessException

Source =" System.IO.Ports.InternalResources.WinIOError

Доступ к порту 'COM9' отказано.

Пожалуйста, помогите !!!

+0

Показать Ваш код. Используете ли вы общий экземпляр или создаете новый экземпляр для потока? Попробуйте выполнить поиск, вам нужен один поток связи, блокировка коллекции и запись в коллекцию, и пусть один поток обрабатывает сообщение. [Многопоточные и последовательные порты] (http://stackoverflow.com/questions/9914948/multithreading-and-serial-ports) и т. Д. – CodeCaster

ответ

1

Это невозможно, как вы его описываете.

У вас может быть только один ручка открыта за раз для определенного порта.

В принципе, вы можете использовать тот же самый дескриптор из нескольких потоков одновременно для отправки данных, но то, что вы предполагаете, произойдет на принимающей стороне, если он получит 3 байта от отправки потока A, а затем 2 байта от отправки потока B, затем еще один байт из потока A и т. д.?

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

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