When opening the port I add the handler and it works.
What I need is, at some point, to change the handler to another subroutine..
What I did was:
AddHandler serport.DataReceived, AddressOf handler1
And the first handler worked as expected…
after some time in code I do:
RemoveHandler serport.DataReceived, AddressOf handler1
AddHandler serport.DataReceived, AddressOf handler2
But the second handler doesn’t work. it never gets called.
What can I do?
I also have coded this routine to open a port :
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
So I thought I could use it in this way:
Dim comSerial As SerialPort
comSerial = OpenSerial("COM1", AddressOf Handler1)
Anyhow, however I do it I get the same result: the first time, the first handler works, when redefined, even if the port is closed and reopened, the second handler never gets
called 🙁
This question was bogus.
The program works fine. I was not receiving any data for another reason.