Probléme de port COM

Résolu
Signaler
Messages postés
623
Date d'inscription
mardi 20 mars 2007
Statut
Membre
Dernière intervention
15 juin 2010
-
Messages postés
623
Date d'inscription
mardi 20 mars 2007
Statut
Membre
Dernière intervention
15 juin 2010
-
Salut,j'ai un probléme acec mon port.Je fais:
portcom.Open();
.....
if (portcom.IsOpen==
true)
{

while(portcom.BytesToRead != 0)
{
//lecture du caractére recu
moncaractére = portcom.ReadByte();
....

}
Mais à chaque fois j'ai une erreur comme quoi le port COM est fermé.
Pouvez-vous m'aider?
Merci.

15 réponses

Messages postés
623
Date d'inscription
mardi 20 mars 2007
Statut
Membre
Dernière intervention
15 juin 2010

Au fait,j'ai déclaré 1 booléen :
bool bPortFerme =
false;
et je fais comme suit:

private
void OnRxchar(
object sender,
SerialDataReceivedEventArgs e)
{

while(bPortFerme ==
false && portcom.BytesToRead != 0)
{

.......
}
et au moment de fermer le port,je mets:
bPortFerme =

true;
portcom.Close();
Et ça marche.
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Membre
Dernière intervention
20 juin 2013
58
Je pense que c'est normal, car tu fermes sûrement ton port avant d'avoir tout lu ! Ta boucle while continue donc de travailler mais le port est fermé => plantage.
Pour faire un peu mieux que de déclarer un boolean, tu peux faire comme ceci:

while(port.IsOpen && port.BytesToRead != 0)

{
   ...
}

<hr />
-Blog-
Messages postés
623
Date d'inscription
mardi 20 mars 2007
Statut
Membre
Dernière intervention
15 juin 2010

Bidou,peux-tu m'aider pleaz?
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Membre
Dernière intervention
30 octobre 2008
55
Faudrait ajouter un bouton au forum "Appeler Bidou" qui lui envoi un MP dès que tu as besoin de lui.

Treve de plaisanteries, tu pourrais peut-etre commencer par donner l'erreur exacte, le code un peu plus complet, et la ligne sur laquelle ca plante (ainsi que peut etre le comportement pas a pas).
Mx
MVP C# 
Messages postés
623
Date d'inscription
mardi 20 mars 2007
Statut
Membre
Dernière intervention
15 juin 2010

Au fait,c'est au nigveau du while que ça me met cette erreur.
.voici l'extrait de mon code:

private
void OnRxchar(
object sender,
SerialDataReceivedEventArgs e)
{

if (portcom.IsOpen==
true)
{

while(portcom.BytesToRead != 0)
{

//lecture du caractére recu
ch = portcom.ReadByte();

// Traitement en fonction de l'etat

switch (mode)
{

case
Mode.Lire:
automate_lire((
byte)ch);

break;

case
Mode.Ecrire:
automate_Ecrire((
byte)ch);

break;
}
}
}

else {}
}
Et automate_Lire et automate_Ecrire sont d'autres fonctions ou je fais d'autres traitements.
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Membre
Dernière intervention
20 juin 2013
58
Salut,
T'es sûr que tu as appelé la méthode Open() sur le port avec de commencer à l'utiliser??

<hr />
-Blog-
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Membre
Dernière intervention
20 juin 2013
58
Mx> Pour le bouton d'appel automatique, non merci je m'en passerai volontier

<hr />
-Blog-
Messages postés
623
Date d'inscription
mardi 20 mars 2007
Statut
Membre
Dernière intervention
15 juin 2010

Au fait je l'ai appelé dans mon load parceque dans le load j'ai commencé à écrire des caractéres.
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Membre
Dernière intervention
20 juin 2013
58
Ok, non je ne vois pas, le code que tu donnes semble correct.
En plus, j'ai rien pour tester sous la main et c'est pas tous les jours que j'utilises cet object...

<hr />
-Blog-
Messages postés
623
Date d'inscription
mardi 20 mars 2007
Statut
Membre
Dernière intervention
15 juin 2010

Au fait j'ai aussi utilisé une fonction Datareceived:
portcom.DataReceived +=
new
SerialDataReceivedEventHandler(OnRxchar);
Et quand je ferme le port,je continue à recevoir des caractéres.
Le probléme est peut etre cette ligne?
Merci.
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Membre
Dernière intervention
20 juin 2013
58
Moui... comment tu fais pour fermer la connection?

<hr />
-Blog-
Messages postés
623
Date d'inscription
mardi 20 mars 2007
Statut
Membre
Dernière intervention
15 juin 2010

J'ai tout simplement fait:
portcom.Close();
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Membre
Dernière intervention
20 juin 2013
58
Je ne sais pas, essayes d'appeler Dispose() encore... Mais je ne pense pas que ça va changer grand chose.
Cherche dans la doc, tu trouveras sûrement des infos.
Je ne peux pas t'en dire plus, je ne connais pas assez cet object...

<hr />
-Blog-
Messages postés
623
Date d'inscription
mardi 20 mars 2007
Statut
Membre
Dernière intervention
15 juin 2010

Salut,vu que j'ai utilisé la ligne de code suivante:
portcom.DataReceived += newSerialDataReceivedEventHandler(OnRxchar);

Y a pas moyen de le libérer et comment?Ou on n'a pas à le libérer aprés utilisation?
Merci.
Messages postés
623
Date d'inscription
mardi 20 mars 2007
Statut
Membre
Dernière intervention
15 juin 2010

Merci bien.