Empfangene SerialPort-Daten in RichTextBox schreiben



  • Hallo an alle.

    Mein Ziel:

    Einen über die serielle Schnittstelle empfangenen Text in einer RichTextBox ausgeben.

    Mein Vorgehen:

    Ich habe die DataReceived Methode verwendet um empfangene Daten in die RichTextBox zu schreiben.

    this->richTextBoxMessages->Text+=this->serialPortToArdiuno->ReadLine();
    

    Das Port-Objekt heißt "serialPortToArdiuno" und die RichTextBox "richTextBoxMessages".

    Folgender Fehler tritt auf:

    System.InvalidOperationException: Ungültiger threadübergreifender Vorgang: Der Zugriff auf das Steuerelement richTextBoxMessages erfolgte von einem anderen Thread als dem Thread, für den es erstellt wurde.
    bei System.Windows.Forms.Control.get_Handle()
    bei System.Windows.Forms.RichTextBox.StreamOut(Stream data, Int32 flags, Boolean includeCrLfs)
    bei System.Windows.Forms.RichTextBox.StreamOut(Int32 flags)
    bei System.Windows.Forms.RichTextBox.get_Text()
    bei ArdiunoConnect.Form1.serialPortToArdiuno_DataReceived(Object sender, SerialDataReceivedEventArgs e) in c:\dokumente und einstellungen\benutzer\eigene dateien\visual studio 2008\projects\ardiunoconnect\ardiunoconnect\form1.h:Zeile 354.

    Weiß jemand eine Lösung?

    mit freundlichen Grüßen,

    VRComputing



  • Du hast von einem anderen Thread aus auf das richTextBoxMessage-Control zugegriffen. Das ist nicht erlaubt. Man darf nur von dem Thread darauf zugreifen, welches auch das Control erzeugt hat.

    Um die Aufrufe in den richtigen Thread zu leiten, gibt es bei jedem Control eine Invoke bzw. BeginInvoke Methode. Diese musst Du von anderen Threads aus verwenden (siehe div. Beispiele im Netz).

    Und als Erinnerung nioch: C++/CLI und WinForms macht keinen Sinn...
    http://blog.kalmbach-software.de/de/2010/03/05/ccli-und-winforms-macht-keinen-sinn/



  • Vielen Dank


Anmelden zum Antworten