Lors de l'ouverture du port, j'ajoute le gestionnaire et cela fonctionne.
Ce que je besoin est, à un moment donné, de changer le gestionnaire à un autre sous-programme ..
Ce que je faisais était:Serialport: Modification de DatareceivedHandler
AddHandler serport.DataReceived, AddressOf handler1
Et le premier gestionnaire a fonctionné comme prévu ...
après un certain temps code I faire:
RemoveHandler serport.DataReceived, AddressOf handler1
AddHandler serport.DataReceived, AddressOf handler2
Mais le deuxième gestionnaire ne fonctionne pas. on ne l'appelle jamais.
Que puis-je faire?
J'ai également codé cette routine pour ouvrir un 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
Je pensais pouvoir l'utiliser de cette manière:
Dim comSerial As SerialPort
comSerial = OpenSerial("COM1", AddressOf Handler1)
Quoi qu'il en soit, mais je le fais-je obtenir le même résultat: la première fois, le premier gestionnaire fonctionne, une fois redéfini, même si le port est fermé et rouvert, le deuxième gestionnaire ne reçoit jamais
appelé: (
Une description de l'application nous aiderait à voir ce que vous essayez de faire. Une chose que je remarque est que vous n'avez aucun handshaking et puis allumez RTS. Comme Hans l'a dit, l'utilisation d'un booléen permet au gestionnaire d'effectuer deux choses différentes. – dbasnett