Bonjour !
Après avoir passé quelques heures à lire de la documentation sur les timers (http://msdn2.microsoft.com/en-us/magazine/cc164015.aspx et http://msdn2.microsoft.com/en-us/magazine/cc164015.aspx) et les threads en plus des nombreux posts sur ce forum, je n'ai pas pu avancé beaucoup dans mon cheminement :
Je développe une application utilisant le port série, pas de problème à ce niveau.
Lors de la mise en fonctionnement de l'interface matérielle via un bouton ''Connect' du logiciel, j'aimerais instaurer un timeout vérifiant une réponse de l'interface matérielle endéans par exemple 1 seconde.
L'algorithme du clic sur le bouton 'connect' serait du genre :
Celui de la fonction de réception du port série :démarrer timer
ouverture port com
envoi d'une chaîne <ping>
Et enfin celui du timer :si timer actif --> le stopper
traiter les données
J'ai déjà essayé pas mal de chose et aucune ne marche mieux que l'autre, c'est la raison pour laquelle je n'ai pas mis de code ici.empêcher déclenchement port série
fermer port
afficher message d'alerte
l'événement dataReceived de mon serialport fait un invoke d'une fonction de traitement (si j'ai bien compris, cette fonction s'exécute donc sur le même thread que l'interface utilisateur ... ?). Ceci étant un timer de System.Windows.Forms ne me semble pas un bon choix car il ne faut pas que d'autres événements interfèrent avec ma seconde de timeout qui doit être (à quelques dizaines de ms près) une vraie seconde.
Dans tous mes tests c'est souvent le même problème, le timeout déclenche alors que j'ai bien reçu des données et que donc il devrait être stoppé sans plus déclencher d'événements timeout. Il faudrait donc pouvoir bloquer ou donner des priorités aux événements. Je vous promets que je suis de bonne volonté mais il doit y avoir des notions que je ne pige pas... je pense que ce que je veux faire est assez basique même si la solution n'est pas si évidente...
Merci pour votre aide !
Partager