Probléme de port COM

Résolu
ddove53 Messages postés 623 Date d'inscription mardi 20 mars 2007 Statut Membre Dernière intervention 15 juin 2010 - 30 mai 2007 à 13:38
ddove53 Messages postés 623 Date d'inscription mardi 20 mars 2007 Statut Membre Dernière intervention 15 juin 2010 - 31 mai 2007 à 13:09
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

ddove53 Messages postés 623 Date d'inscription mardi 20 mars 2007 Statut Membre Dernière intervention 15 juin 2010
31 mai 2007 à 10:19
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.
3
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
31 mai 2007 à 10:29
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-
3
ddove53 Messages postés 623 Date d'inscription mardi 20 mars 2007 Statut Membre Dernière intervention 15 juin 2010
30 mai 2007 à 13:59
Bidou,peux-tu m'aider pleaz?
0
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
30 mai 2007 à 14:17
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# 
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ddove53 Messages postés 623 Date d'inscription mardi 20 mars 2007 Statut Membre Dernière intervention 15 juin 2010
30 mai 2007 à 14:23
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.
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
30 mai 2007 à 14:28
Salut,
T'es sûr que tu as appelé la méthode Open() sur le port avec de commencer à l'utiliser??

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

<hr />
-Blog-
0
ddove53 Messages postés 623 Date d'inscription mardi 20 mars 2007 Statut Membre Dernière intervention 15 juin 2010
30 mai 2007 à 14:39
Au fait je l'ai appelé dans mon load parceque dans le load j'ai commencé à écrire des caractéres.
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
30 mai 2007 à 15:36
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-
0
ddove53 Messages postés 623 Date d'inscription mardi 20 mars 2007 Statut Membre Dernière intervention 15 juin 2010
30 mai 2007 à 15:56
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.
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
30 mai 2007 à 16:00
Moui... comment tu fais pour fermer la connection?

<hr />
-Blog-
0
ddove53 Messages postés 623 Date d'inscription mardi 20 mars 2007 Statut Membre Dernière intervention 15 juin 2010
30 mai 2007 à 17:50
J'ai tout simplement fait:
portcom.Close();
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
30 mai 2007 à 18:54
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-
0
ddove53 Messages postés 623 Date d'inscription mardi 20 mars 2007 Statut Membre Dernière intervention 15 juin 2010
31 mai 2007 à 07:45
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.
0
ddove53 Messages postés 623 Date d'inscription mardi 20 mars 2007 Statut Membre Dernière intervention 15 juin 2010
31 mai 2007 à 13:09
Merci bien.
0
Rejoignez-nous