Bonjour à tous!


Je tente une communication, en port série, avec une carte : je n'envoie mes données que si la carte me donne la bonne réponse.

Pour lire les données sur le port, j'utilise le thread suivant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
Public Shared Sub Read()
    While True
        Try
            While (True)
                    duff = duff & CStr(SPort1.ReadExisting)
            End While
        Catch generatedExceptionName As TimeoutException
        End Try
    End While
End Sub

Et voilà le code qui pose problème :

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
'Compteur des 12 CX
For cmpt1 = 0 To 12
 
    'Compteur des secteurs
    For cmpt2 = 0 To 15
 
        'Erase sauf si on est dans la "zone interdite" (0x00C0F000 -> 0x00C0FFFF)
        If (cmpt1 = 0 And cmpt2 = 15) Then
        Else
 
            ValStr = "Hey"
 
            'Ecriture sur le port
            WriteRS232("9F", 1)
 
            'Attente de "0xAA" pour la suite / L'erreur est ici, au bout de la troisième boucle
            While (duff.Substring(CInt(duff.Length - 1), 1) <> AAStr)
            End While
 
            '00 00 E0
            WriteRS232("0000E0", 3)
            hbwait(30)
            'Adresse
            WriteRS232(ValStr, CInt(ValStr.Length / 2))
 
 
            'Attente de "0xEA" pour continuer
            While (duff.Substring(CInt(duff.Length - 1), 1) <> "ê")
            End While
 
            'Attente de "0xEA" pour continuer
            While (duff.Substring(CInt(duff.Length - 1), 1) <> "ê")
            End While
 
 
        End If
    Next
Next

Le code marche plutôt bien... les deux premières fois. J'ai ensuite un code erreur :

"Une exception non gérée du type 'System.ArgumentOutOfRangeException' s'est produite dans mscorlib.dll
Informations supplémentaires : startIndex ne peut pas être supérieur à la longueur de la chaîne.
"

Or, lorsque je mets un espion sur duff.length et duff.length-1, mon StartIndex est bien inférieur à la longueur de la chaîne!

Alors qu'est-ce qui peut provoquer cette erreur?
Une seconde question : est-il possible, et plus propre, de supprimer le contenu de duff avant chaque lecture?


Je vous remercie d'avance de votre aide!