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
[CODE]
#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;
}
};
}
[\Code]