C# nur Lesen Serielle Schnittstelle, wenn Daten kommt
Ich möchte Lesen, meine seriellen port, aber nur, wenn die Daten kommt(ich will nicht polling).
Dies ist, wie ich es mache.
Schnittstelle = new SerialPort("COM3");
Schnittstelle.BaudRate = 115200;
Schnittstelle.DataBits = 8;
Schnittstelle.StopBits = StopBits.Two;
....
Und dann starte ich einen thread
beginn = new Thread(readCom);
beginn.Start();
und in meinem readCom bin ich beim Lesen ständig (polling 🙁 )
private void readCom()
{
try
{
while (Schnittstelle.IsOpen)
{
Dispatcher.BeginInvoke(new Action(() =>
{
ComWindow.txtbCom.Text = ComWindow.txtbCom.Text + Environment.NewLine + Schnittstelle.ReadExisting();
ComWindow.txtbCom.ScrollToEnd();
}));
beginn.Join(10);
}
}
catch (ThreadAbortException)
{
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
Ich möchte yout Lesen, wenn ein Interrupt kommt. Aber wie kann ich das tun ?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie einen eventHandler für das DataReceived-Ereignis.
Unten ist ein Beispiel aus msdn.microsoft.com mit einigen änderungen: siehe Kommentare!:
Jedesmal, wenn Daten kommt, die DataReceivedHandler löst und druckt Ihre Daten an die Konsole. Ich denke, Sie sollten in der Lage sein, dies zu tun in Ihrem code.
müssen Sie abonnieren Sie den DataReceived-event vor der Eröffnung der port, dann hören Sie auf, das Ereignis ausgelöst.
Seriell, wenn es Daten in den Puffer, der die empfangenen Daten Ereignis wird ausgelöst, bedeutet dies nicht, dass Sie alle Daten auf einmal. Sie müssen warten, für die Anzahl der Zeiten, um alle Ihre Daten; dies ist, wo Sie brauchen zum verarbeiten der empfangenen Daten trennen, vielleicht halten Sie Sie auf cache irgendwo, bevor Sie die endgültige Verarbeitung.
new SerialDataReceivedEventHandler(SerialPortDataReceived);
aber die Antwort oben hat? Macht es einen Unterschied?