Problem mit Thread in Windows Forms Anwendung



  • Hallo, ich bin ziemlich neu in der Windows Forms Programmierung. Google und die Forensuche habe ich schon benutzt, habe aber die "Lösungen" zu meinen Problem nicht richtig verstanden. Ich benutze Visual C++ Express Edition.

    Mein Ziel ist Folgendes: Einen Thread erstellen, der Zugriff auf eine ProgressBar hat.

    Ich habe also ein neues Projekt erstellt. Mein Fenster ist Form1. Folgenden Code habe ich schon geschrieben:

    public ref class Form1 : public System::Windows::Forms::Form
    {
    
        private: System::Void Button_Click(System::Object^  sender, System::EventArgs^  e) {
        Thread^ oThread = gcnew Thread( gcnew ThreadStart( &funktion ) );
        oThread->Start();
        }
    
        static void funktion()
        {
            Sleep(10000);
            //progressBar1->Value = 50;
        }
    };
    

    Das Problem dabei ist Folgendes: Um "funktion" an ThreadStart zu übergeben, muss Funktion als static deklariert sein (sonst kann man sie nicht Referenzieren). Als static Funktion habe ich aber keinen Zugriff auf die progressBar mehr. Deklariere ich "funktion" außerhalb der Form1 Klasse, kann ich natürlich auch nicht auf progressBar1 zugreifen.
    Wie erstelle ich also einen thread, der Zugriff auf Forms meines Hauptfensters hat?

    Ich hoffe ihr könnt mein Thread verständis erweitern und mir helfen 🙂 Bin für jede Anregung dankbar!



  • public ref class Form1 : public System::Windows::Forms::Form 
    { 
    
        private: System::Void Button_Click(System::Object^  sender, System::EventArgs^  e) { 
        Thread^ oThread = gcnew Thread( gcnew ThreadStart( this, &funktion ) ); 
        oThread->Start(); 
        } 
    
        void funktion() 
        { 
            Sleep(10000); 
            //progressBar1->Value = 50; 
        } 
    };
    

    Edit
    Danach wirst Du Dich wohl mit Form::Invoke(..) beschäftigen müssen.
    http://msdn.microsoft.com/de-de/library/zyzhdc6b.aspx


Anmelden zum Antworten