2009-04-20 12 views
1

Ich entwickle in C# mit der SerialPort Klasse. SerialPort.Write() ist eine Blockierungsmethode. Wie kann ich diese Methode beenden, wenn ich nicht mehr schreiben möchte? Ich benutze einen Thread zum schreiben. Ich abbrechen diesen Thread, wenn ich aufhören möchte zu schreiben, aber der COM-Port weiterhin zu schreiben.SerialPort.Write() - Wie kann ich aufhören zu schreiben?

Irgendwelche Ideen?

Vielen Dank.

Entschuldigung für mein grundlegendes Englisch.

+0

Welche Art von Daten schreiben Sie an die serielle Schnittstelle? –

+0

Daten sind ASCII-Zeichen. SerialPort schreibt Bytes. –

+0

Haben Sie versucht, die WriteTimeout-Eigenschaft zu setzen - bevor Sie mit dem Schreiben beginnen? –

Antwort

1

Sowohl der Stream des seriellen Ports als auch der UART puffern.

Der beste Ansatz wäre, kleine Pakete (Zeilen) zu senden und den Schreib-Thread zu unterbrechen, damit die letzten Pakete verschwinden. Wenn Sie das Schreiben zivilrechtlich stoppen können, gibt es auch die Methode DiscardWriteBuffer().

Wenn kleine Pakete keine Option sind, können Sie mindestens WriteBufferSize auf etwas klein (aber> 0) setzen.

+0

Ich wählte den Ansatz zum Löschen mit dem Breakstate-Ansatz. in einem Thread: serialPort.DiscardOutBuffer(); serialPort.BreakState = false; serialPort.write(); in einem anderen Thread serialPort.BreakState = true; serialPort.DiscardOutBuffer(); aber write wirft eine Ausnahme, wenn serialPort schreibt, wenn DiscardOutBuffer So ist es Ihre Vorgehensweise, die ich wähle. –

0

Um vom blockierten Zustand SerialPort.Write() zu brechen, verwenden Sie SerialPort.DiscardOutBuffer(). Dies verursacht eine IOException aber das ist in Ordnung, solange Sie sauber aus dem blockierten Zustand herauskommen können.

Verwandte Themen