Fermeture d'un port série après avoir reçu des données C#

Signaler
-
Messages postés
2427
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
6 mai 2021
-
Bonjour,
j'ai un petit problème : je réalise un programme capable de recevoir et envoyer des informations de la liaison série. J'ai ainsi créé une fenêtre de configuration des paramêtres du port série. la première connection se fait parfaitement, je reçois bien et j'envois bien. Le problème vient lors d'une deuxième connection. Lorsque je tente de me reconnecter sur le meme port série (ou sur un autre) après avoir reçu des données(si je reçois rien je peux changer de port à la volé sans problème), mon soft plante.
Je vous met le code :

private void button9_Click(object sender, EventArgs e)
        {
            if (serialPort1 != null && serialPort1.IsOpen)
                serialPort1.DataReceived -= serialPort1_DataReceived;
            while (!(serialPort1.BytesToRead <bold>0 && serialPort1.BytesToWrite</bold> 0))
            {
                serialPort1.DiscardOutBuffer();
                serialPort1.DiscardInBuffer();
            }
            serialPort1.Close();
            serialPort1.PortName = comboBox4.Text;
            serialPort1.BaudRate = int.Parse(textBox2.Text);
            serialPort1.DataBits = int.Parse(textBox3.Text);
            serialPort1.Parity = (Parity)Enum.Parse(typeof(Parity), comboBox5.Text);
            serialPort1.StopBits = (StopBits)Enum.Parse(typeof(StopBits), comboBox6.Text);
            try
            {
                serialPort1.Open();
            }
            catch (Exception exc)
            {
                MessageBox.Show(exc.Message);
                serialPort1.Close();
            }
            serialPort1.DataReceived += serialPort1_DataReceived;
            Form2.Hide();
        }


C'est la fonction qui permet de changer les paramêtres du port série.
La suivante est celle qui me permet d'afficher les informations reçus :

private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            SerialPort sp = (SerialPort)sender;
            string msg = sp.ReadLine();
            this.Invoke(new EventHandler(delegate
                {
                    textBox1.AppendText(msg + "\n");
                    textBox1.ScrollToCaret();
                }));
        }


Si quelqu'un à une idée d'ou est-ce que ça pourrait venir je suis preneur ;)

Merci

4 réponses

Messages postés
355
Date d'inscription
mercredi 13 avril 2011
Statut
Membre
Dernière intervention
15 juin 2019
9
SerialPort1.Close()

La Science est Grande et Vaste partageons cette connaisance
Non okosa, le close je le fais déjà, le problème était que justement qu'il plantait en le faisant après avoir reçu quelque chose sur le port.

Mais c'est bon j'ai résolu le problème, c'était juqte parce que j'avais oublié de thread la réception donc elle passait en foreground et empechait de quitter mon soft ou de close le port.

Merci quand même
bonjour à tous , comment fait on pour " thread la réception", j'ai le même problème, lorsque je ferme le port, avec _serialport1.Close();
il est bloqué dans datareceived(); et je ne sais pas comment arreter cette fonction
Même problème, comment faire svp ?
Messages postés
100
Date d'inscription
mercredi 27 avril 2011
Statut
Membre
Dernière intervention
21 décembre 2012
1
Oublie pas de marquer le sujet comme résolu ^^
Messages postés
2427
Date d'inscription
samedi 11 janvier 2014
Statut
Contributeur
Dernière intervention
6 mai 2021
137
bonjour
Il ne manquerait pas des signes == ici
 while (!(serialPort1.BytesToRead 0 && serialPort1.BytesToWrite 0))


à modifier en
 while (!(serialPort1.BytesToRead == 0 && serialPort1.BytesToWrite ==  0))