Zum Inhalt springen

Threading Problem


Empfohlene Beiträge

Geschrieben

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.

Geschrieben

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.

Geschrieben

        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 :(

Geschrieben

Der BackgrundWorker befreit nicht von der Pflicht, Control-Zugriffe in den GUI-Thread zu verlagern. Er erleichtert es lediglich. (ReportsProgress + ProgressChanged)

Grüße, JasonDelife.

Geschrieben

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

Im internet finde ich leider expliziet keine Beispiele dazu, was ich suche :(

Geschrieben
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.

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

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...