Variable in Thread nicht mehr bekannt
-
Hi!
Zur Zeit bastle ich an einem Win-Form-Programm. Ich arbeite mit Visual C++ Express Edition.
Meine h-Datei sieht folgendermaßen aus (nur ein Auszug mit dem wichtigsten):// [...] SerialPort _serialPort; Thread^ readThread; // ------------------------------------------------------------------------ // Button: Mit COM-Port verbinden private: System::Void button_verbinden_Click(System::Object^ sender, System::EventArgs^ e) { if (button_verbinden->Text == "Verbinden"){ // [...] // COM-Port öffnen: try{ _serialPort.Open(); button_verbinden->Text = "Verbindung trennen"; // [...] // Sensordaten lesen Thread starten: readThread = gcnew Thread(gcnew ThreadStart( &Form1::DatenLesen )); readThread->Start(); } catch ( System::IO::IOException^ e){ // [...] } catch (System::UnauthorizedAccessException^ e){ // [...] } } else{ button_verbinden->Text = "Verbinden"; readThread->Abort(); _serialPort.Close(); } } // ------------------------------------------------------------------------ // Sensordaten lesen Thread: public: static void DatenLesen(){ array<Byte>^datenbuffer = {0, 0, 0, 0, 0}; while (true) { _serialPort.Read(datenbuffer, 0, 5); } }
Jetzt habe ich das Problem, dass "_serialPort" in DatenLesen() nicht erkannt wird. Woran liegt das und wie könnte ich das ändern?? Ich brauche bitte hilfe! Es kommt folgender Fehler:
error C2228: Links von ".Read" muss sich eine Klasse/Struktur/Union befinden.
Gruß
-
Lass das "static" bei der Funktion weg...
-
Hmmm, dann muss wohl noch mehr an meinem Code flasch sein. Ohne das static bei DatenLesen() kommt der folgende Fehler (in Zeile 16 des Codes oben):
error C3350: "System::Threading::ThreadStart": Ein Delegatkonstruktor erwartet 2 Argument(e).
-
Ja, vermutlich musst Du noch die Instanz mitgeben... (this)
-
Dankeschön, stimmt "this" hat noch gefehlt!
Falls nochmal jemand damit Probleme haben sollte, so heißt es richtig:
readThread = gcnew Thread(gcnew ThreadStart( this, &Form1::DatenLesen ));