Je lis des données d’un périphérique Mettler Toledo en utilisant le code C #.
Voici mon code complet:
private SerialPort port = new SerialPort("COM1", 4800, Parity.None, 8, StopBits.One); public Inwardsfrm() { InitializeComponent(); port.DtrEnable = true; port.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived); } private void Inwardsfrm_Load(object sender, EventArgs e) { if (port.IsOpen == false) try { port.Open(); } catch (Exception oex) { MessageBox.Show(oex.ToSsortingng()); } } private void port_DataReceived(object sender, SerialDataReceivedEventArgs e) { this.Invoke(new EventHandler(DoUpdate)); } private void DoUpdate(object s, EventArgs e) { Thread.Sleep(30); ssortingng data = port.ReadExisting() + port.ReadExisting(); try { richTextBox1.Text = data.Trim().Remove(0, 3); } catch (Exception f) { MessageBox.Show(f.Message.ToSsortingng()); } }
Cela fonctionne très bien et affiche le résultat dans une étiquette nommée richTextBox1
, mais donne parfois l’erreur suivante:
Index et count doivent faire référence à location avec la chaîne Parameter Name: Count
- Le message de demande a déjà été envoyé. Impossible d’envoyer le même message de requête plusieurs fois
- Impossible d’ouvrir LPT1 (port d’imprimante) sur win7 (64 bits). La même application fonctionne sur Win XP
- comment utiliser / extraire l’identité d’un contrôle à l’intérieur d’un contrôle activex
- Obtenir Max () de valeur alphanumérique
- Les tables de hachage sont-elles sérialisables?
Qu’est-ce qui ne va pas? Comment puis-je le réparer?
Il semble que le problème soit causé par la méthode Remove (), il rest moins de 3 caractères dans les données après Trim ().
essayer:
private void DoUpdate(object s, EventArgs e) { Thread.Sleep(30); ssortingng data = port.ReadExisting() + port.ReadExisting(); if(data.Trim().Count() < 3) MessageBox.Show("data = " + data); else try { richTextBox1.Text = data.Trim().Remove(0, 3); } catch (Exception f) { MessageBox.Show(f.Message.ToString()); } }
Cela devrait aider à comprendre.