2011-11-21 2 views
0

Si un périphérique série qui est encore utilisé par Windows est déconnecté, SerialPort.GetPortNames() renvoie le même périphérique détaché que celui qui est toujours connecté. Je ne peux pas non plus fermer le port série sans une erreur d'exception non déclenchée indiquant que le port n'existe pas (ce qui est vrai).SerialPort.GetPortNames() est incorrect

Je peux confirmer que le mappage de périphérique pour SERIALCOMM dans le registre n'est pas mis à jour non plus, où SerialPort.GetPortNames() obtient les noms de port que je suppose. Le gestionnaire de matériel détecte les bons ports COMM.

Y a-t-il un moyen de contourner cela? Puis-je simplement supprimer l'entrée de registre SERIALCOMM? J'ai regardé ce potentiel workaround, mais je pense que je vais juste me laisser attraper l'exception.

+0

Copie possible: stackoverflow.com/questions/2754857/c-sharp-serialport-getportnames-behavior – tinman

Répondre

1

Je ne suis pas un expert mais mon expérience est que tant que vous avez un objet (SW-) connecté au port de com, il sera visible.

Lorsque j'ai testé cela il y a quelques années j'ai eu le même résultat et pas avant que j'ai perdu mon objet SerialPort le port a disparu de la liste GetPortNames (et probablement le registre). Je pense que c'est la façon dont Windows gère ce pilote. Si un port série est débranché pendant l'utilisation dans SW, le système conserve un emplacement pour le port série jusqu'à ce qu'il soit libéré par SW. Dans mon SW j'ai résolu cela en ayant un timeout pour la fonction dont j'avais besoin (l'autre extrémité pourrait cesser de fonctionner aussi) et avant chaque nouveau démarrage de la boucle de programme (normalement une fois tous les 5min-1h) je viens de sortir le COM-port et reconnecté, si la reconnexion a échoué le port a été détecté comme perdu ...

Espérons que cela vous aide.

Questions connexes