J'essaie de créer une petite application pour collecter les données reçues d'un capteur externe connecté à COM10. J'ai réussi à créer un petit objet de console C# et une application qui ouvre le port et transmet les données à un fichier pendant une période fixe en utilisant une boucle for.
Je voudrais convertir cette application pour utiliser l'événement dataReceived à la place du flux. Après avoir lu le Les 5 meilleures astuces de SerialPort Je n'arrive toujours pas à le faire fonctionner et je ne sais pas ce qui me manque. J'ai réécrit l'application console de sorte que tout le code se trouve dans Main et est collé ci-dessous. Quelqu'un peut-il m'expliquer pourquoi le gestionnaire d'événement port_OnReceiveDatazz n'est pas appelé alors que je sais que des données sont envoyées au port par le matériel ?
Gracias
Merci à @Gabe , @Jason Down y @abatishchev pour toutes les suggestions. Je suis dans l'impasse et je n'arrive pas à faire fonctionner le gestionnaire d'événements. Peut-être que cela a quelque chose à voir avec l'appareil. Je peux me contenter de lire le port dans un thread et de transmettre les données directement au fichier.
Code
namespace serialPortCollection
{ class Program
{
static void Main(string[] args)
{
const int bufSize = 2048;
Byte[] buf = new Byte[bufSize]; //To store the received data.
SerialPort sp = new SerialPort("COM10", 115200);
sp.DataReceived += port_OnReceiveDatazz; // Add DataReceived Event Handler
sp.Open();
sp.WriteLine("$"); //Command to start Data Stream
// Wait for data or user input to continue.
Console.ReadLine();
sp.WriteLine("!"); //Stop Data Stream Command
sp.Close();
}
// My Event Handler Method
private static void port_OnReceiveDatazz(object sender,
SerialDataReceivedEventArgs e)
{
SerialPort spL = (SerialPort) sender;
const int bufSize = 12;
Byte[] buf = new Byte[bufSize];
Console.WriteLine("DATA RECEIVED!");
Console.WriteLine(spL.Read(buf, 0, bufSize));
}
}
}