J'ai écrit une application qui lit à partir d'un périphérique série à un rythme très rapide. L'objet port série ne parvient cependant pas à déclencher l'événement DataReceieved
après environ 20 minutes de fonctionnement continu. La déconnexion et la reconnexion par programmation de la série permettent à l'événement de fonctionner à nouveau, mais seulement 20 minutes de plus.Comment utiliser correctement SerialPort.DiscardInBuffer?
J'ai essayé d'utiliser DiscardInBuffer
après chaque événement DataReceived
et cela semble avoir résolu le problème. Mais la méthode consomme beaucoup de temps CPU et dégrade les performances de l'application. MSDN mentionne que la méthode "supprime les données du tampon de réception du pilote série", mais ne suggère pas quand il doit être utilisé.
Quand et comment devrait-on utiliser DiscardInBuffer
, et je l'utilise dans le contexte approprié pour mon problème particulier?
Edit:
Après la mise en œuvre de l'événement ErrorReceived
, les données d'événements retournés indiquaient le type d'événement était un "RXOver".
Etes-vous en train d'écouter l'événement ErrorReceived? http://msdn.microsoft.com/fr-fr/library/system.io.ports.serialport.errorreceived.aspx – SwDevMan81
Non, je ne suis pas. Que devrais-je rechercher dans l'événement ErrorReceived? – steeppham