У меня есть проект VB6, который я пытаюсь преобразовать в С#. в проекте используется свойство myMSComm.SThreshold = 1 MSComm. Что эквивалентно для serialPort в С#?
SThreshold MSComm для последовательного порта
Ответы (2)
Прямого эквивалента нет, SerialPort не имеет события TransmitBufferEmpty. Это довольно бессмысленное событие на современном оборудовании, UART имеет FIFO, который буферизует вывод и продолжает передавать байты даже после того, как буфер передачи опустеет.
Вы можете немного эмулировать его, используя метод SerialPort.BaseStream.BeginWrite(). Указанный вами обратный вызов запускается после завершения записи. Затем вы можете снова вызвать BeginWrite(), чтобы записать больше данных. Не совсем то же самое, что и значение SThreshold, равное 1, поскольку буфер передачи будет заполнен, когда завершится BeginWrite. Помните, что обратный вызов выполняется в потоке пула потоков, поэтому вы должны быть осторожны с блокировкой.
MSComm и Serialport имеют мало общего. Если нужно перейти с MSComm на Serialport, но не менять рабочую часть ПО, вариантов немного. Хорошо известная библиотека SuperCom предлагает совместимый с MSComm ActiveX, который можно использовать с VB net и C#. Это означает почти нулевые изменения. Также включена библиотека классов NET, поведение которой очень похоже на свойства и методы MSComm. И он полностью совместим с 32-битной и 64-битной Windows, в т.ч. Windows ХР,7,8,10.