[WPF-SERIALPORT]Bug sur un PC
Bonjour,
J'ai un souci sur un PC, souci qui ne c'est pas reproduit sur d'autre. Et surtout ce souci ne surviens pas avec d'autres applications.
Concernant la gestion du port série.
Sur l'un des PC de ma boite, les ports séries sont capricieux(COM/USB directement sur le système donc communication par l'USB en faite par un port COM virtuel).
Il ne se ferme pas complètement apparemment, car parfois lorsque l'on essaie de se reconnecter il dit qu'il est déjà utilisé, ce qui n'est pas le cas.
Autre surprise que j'ai vu dans mon fichier de log que j'enregistre dans les try cask, j'ai eue une erreur sur la lecture du port COM, MySerialPort.ReadExisting() alors que je me trouve dans l'évènement de ce même MySerialPort.DataReceived
Comment peut t'il entrée dans le DataReceived si juste après il me dit qu'il n'est pas initialisé.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
|
Private MySerialPort As SerialPort
Friend Event MessageReply(ByVal reply As String)
Friend Sub Connect(ByVal init As InitCOM)
Try
MySerialPort = New SerialPort With {
.PortName = init.PortName,
.BaudRate = init.BaudRate,
.DataBits = init.DataBits,
.Parity = init.Parity,
.StopBits = init.StopBits,
.Handshake = init.Handshake,
.ReadTimeout = init.Timeout
}
AddHandler MySerialPort.DataReceived, AddressOf DataReceivedHandler
MySerialPort.Open()
Catch ex As Exception
If ex.HResult <> -2146232800 Then
WriteInLogFile("CLASSE_COMMUNICATION", , ex.ToString, idxClass)
End If
End Try
End Sub
Public Sub DataReceivedHandler(sender As Object, e As SerialDataReceivedEventArgs)
Try
line &= MySerialPort.ReadExisting()
Dim theEndChars As String = Mid(line, Len(line))
If theEndChars = ChrW(6) Then
RaiseEvent MessageReply(line)
line = ""
End If
Catch ex As Exception
WriteInLogFile("CLASSE_COMMUNICATION", , ex.ToString, idxClass)
End Try
End Sub
Public Function CloseSerialPort() As Boolean
Try
If Not MySerialPort Is Nothing Then
If MySerialPort.IsOpen Then
MySerialPort.Close()
End If
End If
Return True
Catch ex As Exception
WriteInLogFile("CLASSE_COMMUNICATION", , ex.ToString, idxClass)
Return False
End Try
End Function |
Je n'est jamais le cas sur mon PC et mon responsable n'a pas ce genre de souci non plus. Obliger d'attendre un bon moment avant de pouvoir reprendre, ou alors coupé la liaison physique et la rebranché pour que cela fonctionne immédiatement.
Auriez-vous une idée.
Je précise que j'ai nettoyé un peu le code ici, car j'ai une petite gestion d'erreur qui est aussi envoyé dans l'event,
Merci