Je développe une application C#/WPF en utilisant Visual Studio. Cette application utilise un port COM, puis le libère à la sortie. J'utilise le débogueur pour exécuter et arrêter cette application souvent. Parfois, je reçois une exception lors du démarrage d'une session de débogage indiquant que le port COM est déjà utilisé.Visual Studio 2008 en cours d'exécution de l'application, puis en laissant ghost
Le code ferme toujours le port COM ouvert à la sortie, donc j'ai couru portmon pour voir qui se tenait sur le port. Il s'avère que dans les cas "normaux", le port est saisi, utilisé et fermé par mon application (Process KaleidoscopeApp dans portmon). Dans le cas où le port n'est pas libéré, le port est utilisé par le processus "devenv", qui est lui-même Visual Studio.
Pourquoi devenv est-il le propriétaire du port dans ces cas? Quand je ferme l'application, pourquoi continue-t-elle à la tenir? Ce n'est que lorsque je ferme Visual Studio que le port est libéré. C'est un comportement étrange d'autant plus que le débogueur s'est arrêté spécifiquement dans Visual Studio.
Voici une capture de portmon montrant l'accès au port COM. Vous pouvez voir une session typique commence par IRP_MJ_CREATE et se termine par IRP_MJ_CLOSE. C'est toujours le cas avec KaleidoscopeApp. Vous pouvez voir le dernier bit est géré par devenv. Pourtant, chaque lancement est toujours dans le débogueur VS.
357 0,11112275 KaleidoscopeApp IRP_MJ_CREATE Serial4 SUCCES Options: Ouvert
358 0,00000305 KaleidoscopeApp IOCTL_SERIAL_GET_PROPERTIES Serial4 SUCCES
...406 0,02997366 KaleidoscopeApp IRP_MJ_CLEANUP Serial4 SUCCES
407 0,03390231 KaleidoscopeApp IRP_MJ_CLOSE Serial4 RÉUSSITE
408 0.11443431 KaleidoscopeApp IRP_MJ_CREATE Série 4 SU CCESS Options: Ouvrir
409 0,00000727 KaleidoscopeApp IOCTL_SERIAL_GET_PROPERTIES Serial4 SUCCES
...457 0,02995160 KaleidoscopeApp IRP_MJ_CLEANUP Serial4 SUCCES
458 0,03389956 KaleidoscopeApp IRP_MJ_CLOSE Serial4 SUCCES
459 0.11307261 DEVENV.EXE IRP_MJ_CREATE Serial4 SUCCES Options: ouvert
460 0,00000185 devenv.exe IOCTL_SERIAL_GET_PROPERTIES Serial4 SUCCES
...501 35,55274341 devenv.exe IOCTL_SERIAL_WAIT_ON_MASK Serial4 ANNULÉ
Toute idée serait appréciée!
J'ai eu ce même problème, mais avec des fichiers à la place. Cela a quelque chose à voir avec l'environnement du débogueur, mais ce dont je ne suis pas sûr. – AaronLS
Était-ce une situation «elle-même fixée»? Vous souvenez-vous si vous avez modifié des paramètres? – BabaBooey
C'est un peu trop bizarre.SerialPort.Close() est très vulnérable au blocage lorsque vous utilisez Invoke() dans un gestionnaire d'événements DataReceived. Au moins éliminer le blocage possible, n'appelez pas Close(). Ce n'est pas nécessaire. –