Ich habe ein Problem mit meinem Code, ich möchte die serielle Schnittstelle dank DataReceivedHandler lesen, aber ich arbeite nur einmal. Dieser serielle Port ist ein EnOcean-USB-Stick, der Daten von einer elektronischen Karte empfängt, wenn ich einen Knopf darauf drücke. Die Daten senden sind 24 Bytes. Erstes Drücken der Taste funktioniert einwandfrei, ich erhalte die Daten, aber wenn ich ein zweites Mal drücke, passiert nichts, der DataReceivedHandler sieht nichts und sendet mir die Daten nicht.Read SerialDataPort viele Male
public void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
//init serialport comport
SerialPort comport = (SerialPort)sender;
// Shortened and error checking removed for brevity...
int bytes = comport.BytesToRead;
string indata = comport.ReadExisting();
byte[] buffer = new byte[bytes];
comport.Read(buffer, 0, bytes);
HandleSerialData(buffer, comport);
}
HandleSerialData funktioniert, ist es nicht in meinem Problem egal denke ich, lass ich den Code nur bei.
public void HandleSerialData(byte[] respBuffer, SerialPort comport)
{
/*StringBuilder hex = new StringBuilder(respBuffer.Length * 2);
foreach (byte b in respBuffer)
hex.AppendFormat("{0:x2}", b);*/
string hex = "";
int n = 0;
byte[] ID_TIC;
ID_TIC = new byte[8];
for (int i = 12 ; i < 15; i++)
{
ID_TIC[n] = respBuffer[i];
n = n++;
}
hex = hex + BitConverter.ToString(ID_TIC).Replace("-",string.Empty);
string hex2 = hex.ToString();
Dispatcher.BeginInvoke((Action)(() => { EnOcean_Label.Content = ID_TIC; }));
Dispatcher.BeginInvoke((Action)(() => { EnOcean2_Label.Content = ID_TIC; }));
List<User> users = new List<User>();
users.Add(new User() { NumeroTIC = hex2, NumeroCNT1 = hex2, Date = DateTime.Now });
Dispatcher.BeginInvoke((Action)(() => { dgSimple.ItemsSource = users; }));
WriteTest(ID_TIC);
}
Wir haben Ihnen bereits gesagt, wie Sie es in Ihrer vorherigen Frage richtig machen, Sie bekommen es immer noch drastisch falsch. Das Aufrufen von ReadExisting() * und * Read() macht überhaupt keinen Sinn, Sie werden nie etwas von Read() bekommen, da ReadExisting den Empfangspuffer bereits geleert hat. Und Sie zählen immer noch keine Bytes, das ist eine schwierige Anforderung, und Sie können den Rückgabewert von Read() nicht ignorieren. Bitten Sie ein Teammitglied, Ihnen zu helfen. –