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 : Sélectionner tout - Visualiser dans une fenêtre à part
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