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.
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.
Tout ça me paraît parfaitement inutile avec VS2005
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:
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.