Bonjour,
j'aimerais lire un code-barre à l'aide d'un lecteur de code à barres. Ce lecteur est connecté sur le port série et j'utilise donc la classe System.IO.Ports.SerialPort.
J'ai quelques soucis pour lire les données reçues.
Le délégué suivant est appelé quand un code-barre est scanné:
J'utilise la méthode ReadTo("\r\n") pour récupérer le code-barre car j'ai observé que les code-barres étaient terminés par \r\n.
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 void m_PortScan_DataReceived(object sender, SerialDataReceivedEventArgs e) { Console.WriteLine("Données lues."); // Lecture jusqu'au caractère de retour à la ligne string codeBarre = m_PortScan.ReadTo("\r\n"); if (codeBarre != string.Empty) { // Lancement de l'évenement "Nouveau Code Barre lu" if (NouveauCodeBarreLu != null) NouveauCodeBarreLu(this, new CodeBarreEvent(m_CodeBarreScanne)); } }
Le souci est que le délégué est appelé deux fois car le code-barre commence aussi par \r\n.
Donc l'utilisation de ReadTo me gêne un peu.
Mais j'ai aussi essayé d'utiliser la méthode Read(byte[] buffer,int offset, int count).
Le souci est que si je scanne trop vite les code-barres, j'obtiens un décalage des caractères reçues, qui n'est pas récupérable. Par exemple, si mon code-barre est 0123456789. En scannant correctement, il n'y a pas de problème. Par contre, si je scanne trop vite (c'est à dire que le temps entre deux scan est très court), je vais avoir 012345678912345 et la fois d'après, si je scanne correctement j'obtiendrais 3456789012345.
Je me demandais comment faire, pour lire un code-barre de façon fiable à tous les coups.
Merci.
Au revoir
Partager