web-dev-qa-db-fra.com

C # Perte de données série?

j'étudie C # Serial. J'écris ce code pour recevoir des données. Lorsque j'exécute ce code et qu'un autre périphérique a envoyé des données une seule fois, mais le programme reçoit les données deux fois ou plus de trois fois. Comment puis-je résoudre ce problème?

Il y a encore beaucoup je ne sais pas. S'il vous plaît expliquez-le facilement. J'ai passé une semaine parce que je ne pouvais pas résoudre ce problème .... :(

 private void MainForm_Load(object sender, EventArgs e)//main form
        {
            serialPort1.DataReceived += new SerialDataReceivedEventHandler(EventDataReceived);
            CheckForIllegalCrossThreadCalls = false;
                       ........
                       ........
                       ........
        }
                       ........
                       ........
                       ........

void EventDataReceived(object sender, SerialDataReceivedEventArgs e)//this is receiving data method
        {

            int size = serialPort1.BytesToRead;// assign size of receive data to 'int size'

            byte[] buff = new byte[size];// array who assign receiving data(size = int size)
            serialPort1.Read(buff, 0, size);//assign receive data to 'buff'

            string hexData = BitConverter.ToString(buff).Replace("-", " ");//Convert the received data into hexadecimal numbers and store to 'string hexdata'
            for (int i = 0; i < size; i++)
            {
                tb_rx.Text = tb_rx.Text + " \r\n " + hexData;
                Thread.Sleep(1000);//When I first encountered the problem, I added it because I thought the interval was too short. But I don't think this is the solution.
            }
        }
2
BBBD

Ce code est louche:

      string hexData = BitConverter.ToString(buff).Replace("-", " ");//Convert the received data into hexadecimal numbers and store to 'string hexdata'
      for (int i = 0; i < size; i++)
      {
           tb_rx.Text = tb_rx.Text + " \r\n " + hexData;
           Thread.Sleep(1000);//When I first encountered the problem, I added it because I thought the interval was too short. But I don't think this is the solution.
       }

BitConverter.ToString(byte[]) Convertit déjà le réseau d'octets en une séquence de chaînes hexagonales. Dans la boucle pour, vous ajoutez ensuite ceci hexData chaîne à tb_rx (Probablement une zone de texte) pour chaque octet reç. Donc, en fonction du nombre d'octets que vous recevez à la fois, vous obtenez une sortie en double. Juste changer cela à:

string hexData = BitConverter.ToString(buff).Replace("-", " ");//Convert the received data into hexadecimal numbers and store to 'string hexdata'
tb_rx.Text = tb_rx.Text + " \r\n " + hexData;

1
PMF