Существует сетевой инструмент поиска кода Google - http://www.google.com/codesearch
, я пробую к материалу поиска путем выполнения чего-то как "lang:java общедоступное перечисление"
Из документации SerialPort :
Любые общедоступные статические (общие в Visual Basic) члены этого типа являются потокобезопасными. Потокобезопасность любых членов экземпляра не гарантируется.
Поскольку чтение и запись не являются статическими, они не будут потокобезопасными. В любом случае это очень плохая идея, поскольку класс SerialPort поддерживает для вас внутренние буферы.
Вам необходимо синхронизировать ввод-вывод с вашим последовательным портом.
Чтение и запись в последовательный порт «одновременно» из разных потоков - это стандартный способ обработки связи через последовательный порт: один поток выполняет чтение, а другой - запись. Приемлемо.
Существует ряд устройств с последовательным интерфейсом, которые асинхронно отправляют данные на хост-машину, при этом позволяя отправлять команды на само устройство: такие устройства, как сканеры штрих-кода, сканеры тегов и камеры.
Проблемы?
Проблемы возникают при попытке синхронизировать обмен данными с устройством.
Например, вы хотите написать команду, а затем немедленно прочитать любой ответ. Что ж, в этом случае вы должны приостановить поток чтения и вручную прочитать все данные последовательного порта после записи команды. После обработки команды
Я ожидал, что описанный вами конкретный случай с 1 потоком чтения и 1 потоком записи будет безопасным.
Каналы чтения и записи на оборудовании предназначены для использования в полнодуплексном режиме, и программное обеспечение также должно поддерживать это.
И хотя я не смог найти явного заявления об этом, пример на странице MSDN для SerialPort также записывает из основного потока, а читает из другого. Без блокировки.