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 ));
    

Anmelden zum Antworten