Schleife stürzt ab! Windows Forms

danke erstmal:)

bei mir kommen schon alleine wenn ich den BackgroundWorker Kontruktor der Form einfüge mehrere fehlermeldungen... :(

PHP:
Fehler	9	error C2061: Syntaxfehler: Bezeichner 'System'	c:\projekte\windows1\windows1\Form1.h	61
Fehler	10	error C2065: 'BackgroundWorker_DoWork': nichtdeklarierter Bezeichner	c:\projekte\windows1\windows1\Form1.h	62
Fehler	12	error C2065: 'BackgroundWorker_RunWorkerCompleted': nichtdeklarierter Bezeichner	c:\projekte\windows1\windows1\Form1.h	63
Fehler	11	error C3350: "System::ComponentModel::DoWorkEventHandler": Ein Delegatkonstruktor erwartet 2 Argument(e).	c:\projekte\windows1\windows1\Form1.h	62
Fehler	13	error C3350: "System::ComponentModel::RunWorkerCompletedEventHandler": Ein Delegatkonstruktor erwartet 2 Argument(e).	c:\projekte\windows1\windows1\Form1.h	63
 
Sorry, ich's habs von C# übertragen, da gab's wohl ein paar Reibungsverluste :)
Wenn du den Part im Konstruktor änderst, sollte es passen:
C++:
System::ComponentModel::BackgroundWorker^ Worker = gcnew System::ComponentModel::BackgroundWorker();
Worker->DoWork             += gcnew DoWorkEventHandler(this, &Form1::BackgroundWorker_DoWork );
Worker->RunWorkerCompleted += gcnew RunWorkerCompletedEventHandler(this, &Form1::BackgroundWorker_RunWorkerCompleted);
Worker->RunWorkerAsync();
"Form1" musst du durch den Namen deiner Form ersetzen.

Gruß
MCoder
 
Danke erstmal, hab es gerade probiert...jetzt habe ich dann andere Fehlermeldungen:(

Code:
Fehler	9	error C2039: 'BackgroundWorker_DoWork': Ist kein Element von 'windows1::Form1'	c:\projekte\windows1\windows1\Form1.h	62
Fehler	12	error C2039: 'BackgroundWorker_RunWorkerCompleted': Ist kein Element von 'windows1::Form1'	c:\projekte\windows1\windows1\Form1.h	63
Fehler	10	error C2065: 'BackgroundWorker_DoWork': nichtdeklarierter Bezeichner	c:\projekte\windows1\windows1\Form1.h	62
Fehler	13	error C2065: 'BackgroundWorker_RunWorkerCompleted': nichtdeklarierter Bezeichner	c:\projekte\windows1\windows1\Form1.h	63
Fehler	11	error C3350: "System::ComponentModel::DoWorkEventHandler": Ein Delegatkonstruktor erwartet 2 Argument(e).	c:\projekte\windows1\windows1\Form1.h	62
Fehler	14	error C3350: "System::ComponentModel::RunWorkerCompletedEventHandler": Ein Delegatkonstruktor erwartet 2 Argument(e).	c:\projekte\windows1\windows1\Form1.h	63
 
Code:
Ist kein Element von 'windows1::Form1'
Wie heißt deine Form? Hier ist entweder "windows1" oder "Form1" überflüssig.

Gruß
MCoder
 
Dann sollte der letzte Code von mir eigentlich ohne Änderung passen. Zeige doch mal deinen Konstruktor.

Gruß
MCoder
 
so hier:)

Code:
	Form1(void)
		{
			InitializeComponent();
			System::ComponentModel::BackgroundWorker^ Worker = gcnew System::ComponentModel::BackgroundWorker();
			Worker->DoWork += gcnew DoWorkEventHandler(this, &Form1::BackgroundWorker_DoWork );
			Worker->RunWorkerCompleted += gcnew RunWorkerCompletedEventHandler(this, &Form1::BackgroundWorker_RunWorkerCompleted);
			Worker->RunWorkerAsync();
		}
 
Der Code schaut ok aus. Bei mir läuft diese kleine Beispiel fehlerfrei. Vergleiche mal mit deinem Code. Evt. fehlt nur das "using namespace System::ComponentModel;".
C++:
#pragma once

namespace WinFormsApp
{
    using namespace System;
    using namespace System::ComponentModel;
    using namespace System::Windows::Forms;

    public ref class Form1 : public System::Windows::Forms::Form
    {
        public:
            Form1(void)
            {
                InitializeComponent();
                System::ComponentModel::BackgroundWorker^ Worker = gcnew System::ComponentModel::BackgroundWorker();
                Worker->DoWork             += gcnew DoWorkEventHandler(this, &Form1::BackgroundWorker_DoWork );
                Worker->RunWorkerCompleted += gcnew RunWorkerCompletedEventHandler(this, &Form1::BackgroundWorker_RunWorkerCompleted);
                Worker->RunWorkerAsync();
            }

        protected:
            ~Form1()
            {
                if (components)
                {
                    delete components;
                }
            }

        private:
            System::ComponentModel::Container ^components;

        #pragma region Windows Form Designer generated code
            void InitializeComponent(void)
            {
                this->SuspendLayout();
                this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
                this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
                this->ClientSize = System::Drawing::Size(277, 193);
                this->Name = L"Form1";
                this->Text = L"Form1";
                this->ResumeLayout(false);
            }
        #pragma endregion

        private:
            void BackgroundWorker_DoWork( Object^ sender, DoWorkEventArgs^ e )
            {
                // lange Schleife
            }
 
            void BackgroundWorker_RunWorkerCompleted( Object^ sender, RunWorkerCompletedEventArgs^ e )
            {
                // Backgroundworker ist fertig -> Ergebnisse der Schleife können verarbeitet werden
            }
    };
}
Gruß
MCoder
 
Okay danke, also funktioniert erstmal...hatte was vergessen zu kopieren...aber jetzt geht alles...(erstmal):D...werde jetzt mal versuchen meine schleife dort unterzubringen...ist es irgendwie möglich dann auch einen stop button für die schleife einzubauen?

Gruß
 
Achso und wie bekomme ich es hin das BackgroundWorker_DoWork erst bei einem Button event aufgerufen wird?

Achso und die Fehlermeldung hier taucht auf:

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.

Gruß
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück