Ich habe hier eine Menge Fragen darüber gelesen, wie man Daten von seriellen Ports mit der .NET SerialPort Klasse liest, aber keiner der empfohlenen Ansätze hat sich für mich als vollkommen effizient erwiesen. HierWie kann man einen seriellen Port mit .NET Framework korrekt lesen?
ist der Code, den ich jetzt bin mit:
SerialPort port = new SerialPort("COM1");
port.DataReceived += new SerialDataReceivedEventHandler(MyDataReceivedHandler);
Und der Event-Handler:
void MyDataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
int count = port.BytesToRead;
byte[] ByteArray = new byte[count];
port.Read(ByteArray, 0, count);
}
Aber ich bin immer noch einige Daten fehlen manchmal. Ich habe versucht, die Daten im Event-Handler anders zu lesen, aber ohne Glück.
Da das .NET 4.5 neue Möglichkeiten bringt, einige asynchrone Aufgaben zu erledigen, wie die Methode ReadAsync, die für einen SerialPort-Stream verwendbar zu sein scheint, bin ich gespannt, welche Methode für diese Fälle empfohlen wird.
Ihre Frage ist sehr vage. "Ich vermisse manchmal noch einige Daten" ist so, als würde ich Ihrem Mechaniker sagen "mein Auto macht manchmal ein komisches Geräusch" und fragt, wie viel es kostet, es zu reparieren. Vielleicht könnte [diese Antwort] (http://stackoverflow.com/a/2966357/62576) zu einer verwandten Frage helfen. Ich denke jedoch, dass Sie viel spezifischer sein müssen, wenn Sie Hilfe benötigen; so wie es ist, gibt es nicht viele, die nicht beantwortet werden können, wenn man sich andere Fragen zu diesem Thema ansieht. –
Sie haben recht, ich werde ein reales Beispiel zusammenstellen, um besser zu veranschaulichen, was passiert ... –
Die Implementierung eines seriellen Kommunikationsprotokolls über RS232 oder 485 ist eine wirklich, wirklich harte Aufgabe. Es erfordert viel Erfahrung. Ich habe dies seit guten alten DOS-Tagen implementiert und stehe immer noch in einigen üblichen Fallen. Warum versuchen Sie nicht, ein zuverlässiges Angebot von Drittanbietern für den Umgang mit der seriellen Kommunikation zu finden? Sie werden wahrscheinlich all die vielen, vielen, vielen Bugs gebügelt haben, die Sie in sich selbst fallen lassen werden :-) Wenn das eine Übung ist, dann machen Sie weiter mit der großen Zufriedenheit, endlich die serielle Kommunikation zu meistern! :-) – Loudenvier