Schleife stürzt ab! Windows Forms

Dann würde ich nochmal prüfen, ob sich in deiner inneren Schleife nicht evtl.ein } eingeschlichen hat, das dort nicht reingehört.
Ansonsten nochmal prüfen, daß die Ausgabe auch wirklich innerhalb der Schleife liegt.

Zugegeben, klingt beides trivial, aber durch solche Sachen hat es auch schon bei mir Loggings versaut. ;)
 
Also ich habe mal die log funktion in den BackgroundWorker_DoWork reingehauen und da kommt leider folgende Fehlermeldung! Aber wenn ich es bei ProgressChanged reinmache, kommt die fehlermeldung nicht!:rolleyes:


Code:
Zusätzliche Informationen: Ungültiger threadübergreifender Vorgang: Der Zugriff auf das Steuerelement textBox2 erfolgte von einem anderen Thread als dem Thread, für den es erstellt wurde.
 
Hi.

Wie sieht denn dein Code im BackgroundWorker_RunWorkerCompleted(), BackgroundWorker_ProgressChanged() und in der BackgroundWorker_DoWork() Methode aus?

Gruß
 
beim BackgroundWorker_DoWork is eine schleife drin die immer ihren aktuellen stand in eine textbos schreiben soll (LOG):

und so sieht er aus...



Ich habe meinen zuletzt geposteten Code etwas aufgebohrt:
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();
	    	
            Worker = gcnew System::ComponentModel::BackgroundWorker();
            Worker->DoWork             += gcnew DoWorkEventHandler(this, &Form1::BackgroundWorker_DoWork );
            Worker->RunWorkerCompleted += gcnew RunWorkerCompletedEventHandler(this, &Form1::BackgroundWorker_RunWorkerCompleted);
            Worker->ProgressChanged    += gcnew ProgressChangedEventHandler( this, &Form1::BackgroundWorker_ProgressChanged );
            Worker->WorkerReportsProgress = true;
		}

	protected:
		~Form1()
		{
            if (components)
			{
				delete components;
			}
		}
    private: System::Windows::Forms::Button^  button1;
    private: System::Windows::Forms::TextBox^  textBox1;
    protected: 

	private:
		System::ComponentModel::Container ^components;
		System::ComponentModel::BackgroundWorker ^Worker; 
		System::String ^ergebnis;

    #pragma region Windows Form Designer generated code
		void InitializeComponent(void)
		{
            this->button1 = (gcnew System::Windows::Forms::Button());
            this->textBox1 = (gcnew System::Windows::Forms::TextBox());
            this->SuspendLayout();
            // 
            // button1
            // 
            this->button1->Location = System::Drawing::Point(21, 31);
            this->button1->Name = L"button1";
            this->button1->Size = System::Drawing::Size(75, 23);
            this->button1->TabIndex = 0;
            this->button1->Text = L"button1";
            this->button1->UseVisualStyleBackColor = true;
            this->button1->Click += gcnew System::EventHandler(this, &Form1::OnClickButton);
            // 
            // textBox1
            // 
            this->textBox1->Location = System::Drawing::Point(114, 33);
            this->textBox1->Name = L"textBox1";
            this->textBox1->Size = System::Drawing::Size(151, 20);
            this->textBox1->TabIndex = 1;
            // 
            // Form1
            // 
            this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);
            this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;
            this->ClientSize = System::Drawing::Size(277, 83);
            this->Controls->Add(this->textBox1);
            this->Controls->Add(this->button1);
            this->Name = L"Form1";
            this->Text = L"Form1";
            this->ResumeLayout(false);
            this->PerformLayout();
        }
    #pragma endregion

    private:
        void BackgroundWorker_DoWork( Object^ sender, DoWorkEventArgs^ e )
        {
            for( int i = 0; i < 100; i++ )
            {
                System::Threading::Thread::Sleep(100);
            
                ergebnis = String::Format("Fortschritt: {0}", i);
                Worker->ReportProgress(0);
            }
        }
 
        void BackgroundWorker_RunWorkerCompleted( Object^ sender, RunWorkerCompletedEventArgs^ e )
        {
            textBox1->Text = "Fertig";
        }
        
        void BackgroundWorker_ProgressChanged( Object^ sender, ProgressChangedEventArgs^ e )
        {
            textBox1->Text = ergebnis;
        }
        
        private: System::Void OnClickButton(System::Object^  sender, System::EventArgs^  e)
        {
            Worker->RunWorkerAsync();
        }
    };
}
Gruß
MCoder
 
ah hab es...ich trottel hatte irgendwann mal das Worker->ReportProgress(0); auskommentiert und das is natürlich dann blöd;):D
 

Neue Beiträge

Zurück