SThreshold MSComm для последовательного порта

У меня есть проект VB6, который я пытаюсь преобразовать в С#. в проекте используется свойство myMSComm.SThreshold = 1 MSComm. Что эквивалентно для serialPort в С#?


person user2109003    schedule 17.12.2013    source источник


Ответы (2)


Прямого эквивалента нет, SerialPort не имеет события TransmitBufferEmpty. Это довольно бессмысленное событие на современном оборудовании, UART имеет FIFO, который буферизует вывод и продолжает передавать байты даже после того, как буфер передачи опустеет.

Вы можете немного эмулировать его, используя метод SerialPort.BaseStream.BeginWrite(). Указанный вами обратный вызов запускается после завершения записи. Затем вы можете снова вызвать BeginWrite(), чтобы записать больше данных. Не совсем то же самое, что и значение SThreshold, равное 1, поскольку буфер передачи будет заполнен, когда завершится BeginWrite. Помните, что обратный вызов выполняется в потоке пула потоков, поэтому вы должны быть осторожны с блокировкой.

person Hans Passant    schedule 17.12.2013
comment
Спасибо за ваш ответ. Я просто хочу кое-что понять, если буфер передачи пуст, что он будет отправлять? - person user2109003; 18.12.2013

MSComm и Serialport имеют мало общего. Если нужно перейти с MSComm на Serialport, но не менять рабочую часть ПО, вариантов немного. Хорошо известная библиотека SuperCom предлагает совместимый с MSComm ActiveX, который можно использовать с VB net и C#. Это означает почти нулевые изменения. Также включена библиотека классов NET, поведение которой очень похоже на свойства и методы MSComm. И он полностью совместим с 32-битной и 64-битной Windows, в т.ч. Windows ХР,7,8,10.

person lindev    schedule 13.11.2015