C# Async Serial Port Lire
J'ai une classe qui se lit à partir du port série à l'aide de la DataReceived gestionnaire d'événements en C#. Quand je reçois des données, je sais que l'en-tête de 5 octets, donc je ne veux pas faire n'importe quoi avec les données jusqu'à ce que j'ai au moins ça. Mon code est ci-dessous:
while (serialPort.BytesToRead<5)
{
//Do nothing while we have less bytes than the header size
}
//Once at least 5 bytes are received, process header
Si je comprends bien, ce code est le blocage et doit être améliorée. Je suis à la recherche de suggestions sur la façon de le faire. Serait un autre gestionnaire d'événement à l'intérieur de la DataReceived gestionnaire d'événement approprié?
Vous devez vous connecter pour publier un commentaire.
Utilisation de programmation asynchrone (n'oubliez pas de cible première de votre application .NET Framework 4.5).
Ici vous avez mon de mise en œuvre que les méthodes d'extension pour
SerialPort
.et voici comment lire:
System.IO.Ports.SerialPort serialPort
au lieu de simplementSerialPort serialPort
. Je ne sais pas si j'ai raté son coup quelque chose, mais il ne veut travailler de cette façon. Oui, je suisusing System.IO.Ports
. --- Mais, je n'arrive toujours pas à lire quoi que ce soit 🙁ReadTimeout
ne fonctionne pas surBaseStream
Qui brûle 100% de base, vous ne voulez pas le faire. La bonne façon est d'avoir votre programme de bloc sur le Read() de l'appel. Vous écririez-il semblable à ceci:
Ou si vous utilisez le DataReceived cas alors il peut ressembler à ceci:
N'oubliez pas de mettre rcveLength à 0 après vous avez le message en entier et traitée.