Ajouter un commentaire

fredericmazue

Bonjour,

Je dois dire que j'ai du mal à comprendre ton problème, que je n'ai jamais rencontré sous VS2005 mais je vais quand même essayer de t'aider.

Quote:

J'ai réglé le problème de Tread-Safe avec la commande
Control.CheckForIllegalCrossThreadCalls = False
ou en utilisant "InvokeRequired" avec un Delegate.

Tout ça me paraît parfaitement inutile avec VS2005

Quote:

Je pense que le Stream est supprimé avant la fermeture éffective du Port.

Je pense le contraire.
En natif, la programmation du port série se fait avec des entrées/sorties asynchrones ou "pendantes" et ceci dans des threads qui se mettent en attente d'une fin d'opération d'E/S.

Sous .Net 2005 toute cette cuisine est encapsulée et évidement masquée au codeur, mais il me semble qu'en arrière plan le runtime de .Net suis exactement la démarche requise (requise au dire même de Microsoft) à savoir les E/S pendantes.

Donc pour fermer le port, il faut à priori que ce soit possible au sens natif du terme, c'est à dire qu'une E/S ne soit pas pendante. Donc dans un premier temps et sous réserve de comprendre mieux ton problème, je te suggère de fermer ton port ainsi:

while (serialport.BytesToRead != 0)
{
serialport.ReadLine();
}
serialport.Close();				

Quote:

La définition de SerialPort.Close : Ferme la connexion au port, affecte à la propriété IsOpen la valeur false et supprime l'objet Stream interne.

Sous réserve que le thread (interne au runtime) qui lit dans le flux puisse être arrêté ce qui à priori nécessite qu'il n'y ait pas une E/S pendantes.

Enfin si j'ai bien compris ton problème... Fais l'essai et dis nous ce que ça donne. Et éventuellement poste un peu de code pour qu'on se fasse une idée plus précise.

Filtered HTML

Plain text

CAPTCHA
Cette question permet de vérifier que vous n'êtes pas un robot spammeur :-)
 RRRR   EEEE      J  III  PPPP  
R R E J I P P
RRRR EEE J I PPPP
R R E J J I P
R RR EEEE JJJ III P