String von Com Schnitstelle in TextBox anzeigen
-
Hallo,
ich beschäftige mich nun seit einiger Zeit mit C++ 2008 und Versuche gerade einen String, den ich über eine Serielle Schnittstelle einlese, in einer TextBox anzuzeigen.
Wenn ich das Programm ohne Debug starte, läuft es und der String wird auch angezeigt. Doch wenn ich es mit Debug strate, kommt immer folgende Fehlermeldung, sobald das Event der Seriellene Schnittstelle auf die TextBox der Form1 schreibend zugreifen will.„Eine nicht behandelte Ausnahme des Typs "System.InvalidOperationException" ist in System.Windows.Forms.dll aufgetreten.
Zusätzliche Informationen: Ungültiger threadübergreifender Vorgang: Der Zugriff auf das Steuerelement textBox1 erfolgte von einem anderen Thread als dem Thread, für den es erstellt wurde.“
Ich habe nun schon in einegen Foren nachgelesen und auch in Büchern nachgeschlagen, doch eine gute Erklärung bzw. Problemlösung habe ich noch nirgends gefunden.
Könnte mir da vielleicht jemand weiterhelfen?
Hier ist noch mein Quellcode der Form1 Anwendung.Mit freundlichen Grüßen
Julian
#pragma once namespace Hauptprojektdatei { using namespace System; using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data; using namespace System::Drawing; public ref class Form1 : public System::Windows::Forms::Form { public: Form1(void) { InitializeComponent(); serialPort1->Open(); serialPort1->Write("bf"); serialPort1->Write("#\r"); } protected: ~Form1() { if (components) { delete components; } } private: System::Windows::Forms::TextBox^ textBox1; protected: private: System::IO::Ports::SerialPort^ serialPort1; private: System::ComponentModel::IContainer^ components; private: #pragma region Windows Form Designer generated code void InitializeComponent(void) { this->components = (gcnew System::ComponentModel::Container()); this->textBox1 = (gcnew System::Windows::Forms::TextBox()); this->serialPort1 = (gcnew System::IO::Ports::SerialPort(this->components)); this->SuspendLayout(); // textBox1 this->textBox1->Location = System::Drawing::Point(12, 100); this->textBox1->Name = L"textBox1"; this->textBox1->Size = System::Drawing::Size(261, 22); this->textBox1->TabIndex = 0; // serialPort1 this->serialPort1->DataReceived += gcnew System::IO::Ports::SerialDataReceivedEventHandler(this, &Form1::received_date); // Form1 this->AutoScaleDimensions = System::Drawing::SizeF(8, 16); this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; this->ClientSize = System::Drawing::Size(292, 150); this->Controls->Add(this->textBox1); this->Name = L"Form1"; this->StartPosition = System::Windows::Forms::FormStartPosition::CenterScreen; this->Text = L"Form1"; this->ResumeLayout(false); this->PerformLayout(); } #pragma endregion private: System::Void received_date(System::Object^ sender, System::IO::Ports::SerialDataReceivedEventArgs^ e) { String^ daten; daten=serialPort1->ReadTo("#\r"); textBox1->Text=daten; } }; }
-
Zusätzliche Informationen: Ungültiger threadübergreifender Vorgang: Der Zugriff auf das Steuerelement textBox1 erfolgte von einem anderen Thread als dem Thread, für den es erstellt wurde.“
InvokeRequired
BeginInvoke
EndInvoke
-
Hi danke für deine schnelle Antwort. Könntest du mir die hintergründe für diese Problem vielleicht noch näher schilder? Bzw. hättest du ein Beispiel Code mit Erklärungen? Vielen Dank