Wie Sie COM-port und warten Sie auf eine Antwort von c#

Brauche ich, um Befehle zu senden, um einen seriellen port für die Kommunikation mit einem modem Enfora. Für jeden Befehl, den ich erhalten eine Antwort, aber die Länge der Antwort-string ist, kann variieren.
Ich muss wissen, wie man schreiben und warten Sie dann die Antwort, bis es fertig ist...

Also habe ich darüber nachgedacht, ein thread, liest von der seriellen Schnittstelle und das Programm schreibt nur...

Die thread-Funktion

private void thread_Handler()
{
    while(true)
        this.read();
}
private void read()
{
    if (this.rtbMessages.InvokeRequired)
    {
        try
        {
            SetTextCallback d = new SetTextCallback(read);
            this.Invoke(d);
        }
        catch{}
    }
    else
    {
        readBuffer = serialPort.ReadExisting();
        rtbMessages.AppendText(readBuffer);
    }
}

So, in diesem thread wird immer versuchen zu Lesen vom com-PORT und ich schicke die Nachrichten auf diese Weise

writeBuffer = "COMMAND 1";
serialPort.Write(writeBuffer);
writeBuffer = "COMMAND 2";
serialPort.Write(writeBuffer);

Allerdings habe ich nicht bekommen, die Antwort von der zweite Befehl, den ich senden mit Write()...
Ich habe versucht, entfernen den Faden und mit ReadExisting() nach jedem Schreiben (), aber auch dass hat nicht funktioniert.

Nur so konnte ich es zu arbeiten, war fügen Sie eine

System.Threading.Thread.Sleep(1000);

nach jedem Aufruf zu Schreiben, dann bekomme ich alle Antworten von jeder Write () - Befehl...
Aber ich will nicht dies, ich will wissen, einen anderen Weg, um effektiv zu schreiben und jede Antwort von jedem Befehl, den ich senden, unabhängig von der Länge der Antwort-string ist und wie lange es dauert, für mich, für den Empfang der Antwort-Nachricht.

Manchmal werde ich immer Nachrichten eine Ewigkeit, bis ich senden Sie ein weiterer Befehl zum stoppen der Erzeugung von Nachrichten.

Danke!

InformationsquelleAutor Renato | 2012-09-06
Schreibe einen Kommentar