При открытии порта добавляю обработчик и он работает.
В какой-то момент мне нужно поменять обработчик на другую подпрограмму ..
То, что я сделал, было:
AddHandler serport.DataReceived, AddressOf handler1
И первый обработчик работал как положено ...
через некоторое время в коде я делаю:
RemoveHandler serport.DataReceived, AddressOf handler1
AddHandler serport.DataReceived, AddressOf handler2
Но второй обработчик не работает. это никогда не вызывается.
Что я могу сделать?
Я также кодировал эту процедуру, чтобы открыть порт:
Public Function OpenSerial(ByRef serialport As String, ByVal receivehandler As SerialDataReceivedEventHandler) As SerialPort
Dim ser As SerialPort
ser = New System.IO.Ports.SerialPort(serialport, 115200, Parity.None, 8, StopBits.One)
With ser
.Handshake = Handshake.None
.ReadBufferSize = 10000
.ReadTimeout = 500
.WriteBufferSize = 10000
.WriteTimeout = 500
.RtsEnable = True
.DtrEnable = True
AddHandler .DataReceived, receivehandler
AddHandler .ErrorReceived, AddressOf sErrorHandler
.Encoding = System.Text.Encoding.Default
.Open()
.DiscardOutBuffer()
End With
OpenSerial = ser
End Function
Так что я подумал, что смогу использовать это следующим образом:
Dim comSerial As SerialPort
comSerial = OpenSerial("COM1", AddressOf Handler1)
Во всяком случае, однако я делаю это, я получаю тот же результат: в первый раз, первый обработчик работает, когда переопределен, даже если порт закрыт и открыт, второй обработчик никогда не получает
называется :(