Zum Inhalt springen

Threading Problem


errox

Empfohlene Beiträge

Hallo.

Ich möchte gerne eine Anwendung von mir erweitern. Dazu benötige ich mehrere Threads.

Aber ich scheitere schon ein einem Kleinen Thread:


        public Form1()

        {

            InitializeComponent();

        }


        private void button1_Click(object sender, EventArgs e)

        {

            Thread t = new Thread(new ThreadStart(ThreadProc));

            t.Start();

        }


        public void ThreadProc()

        {

            for (int i = 0; i < 100; i++)

            {

                progressBar1.Value = i;

                Thread.Sleep(100);

            }

        }

Ich habe eine Progressbar. Wenn ich die Value der Progressbar erhöhe mit einem Sleep, hängt sich die Anwendung so lange auf, bis die Schleife abgeschlossen ist. Desshalb will ich diese Aktion in ein Thread auslagern.

Leider klappt das nicht. Der Vorgang ist "Threadübergreifend". Was das genau bedeutet, weiss ich selbst nicht so genau.

Jedenfalls wäre es Super, wenn das klappen würde.

Das wäre ein guter Ansatz für mich, größere Aufgaben in Threads zu unterteilen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Man darf in .NET nicht von jedem Thread auf Controls zugreifen!

Genauer gesagt: Nur von einem einzigen, dem GUI-Thread.

Zugriffe auf Controls muss man immer in den GUI-Thread auslagern. Dazu gibt es [begin]Invoke(Delegate). Je nach Szenario, ist es einfacher, den BackgrundWorker zu nutzen.

Grüße, JasonDelife.

Link zu diesem Kommentar
Auf anderen Seiten teilen

        private void button1_Click(object sender, EventArgs e)

        {

            backgroundWorker1 = new BackgroundWorker();

            backgroundWorker1.DoWork += new DoWorkEventHandler(backgroundWorker1_DoWork);

            backgroundWorker1.RunWorkerAsync();

        }

        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)

        {

            for (int i = 0; i < 100; i++)

            {

                progressBar1.Value = i;

                Thread.Sleep(100);

            }

        }

Also hier passiert leider nichts :(

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wieso ist es ( selbst in .NET ) so kompliziert das zu Verwalten?

Weil Threading nunmal nicht einfach ist. Und in .NET ist es eigentlich recht einfach.

Vllt. hilft dir das:

BackgroundWorker-Klasse (System.ComponentModel)

Gewusst wie: Ausführen eines Vorgangs im Hintergrund

Empfohlene Vorgehensweise für das verwaltete Threading

Wenn nicht, musst du uns genauer beschreiben, was du tun willst.

Grüße, JasonDelife.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...