Aktualisieren eines Fortschrittsbalkens in einer C # -GUI von einem anderen Thread und einer anderen Klasse aus [duplizieren]

Mögliche Duplikate:
Aktualisieren eines Fortschrittsbalkens von einem anderen Thread

In meinem Programm wollte ich Nicht-GUI-Funktionen einer anderen Klasse zuordnen und Dinge, die sich auf die GUI beziehen, in der Hauptklasse belassen. Es treten jedoch Probleme beim Aktualisieren eines Fortschrittsbalkens auf, während eine der Arbeitermethoden in der Arbeiterklasse ihre Arbeit erledigt. Ich weiß, dass ich hier mit Multithreading arbeiten muss, aber ich verstehe nicht, wie. Ich vermisse vielleicht nur einfache Dinge, aber wenn ich nach Informationen darüber suche, scheinen die meisten Tutorials über die Minutien zu sprechen, aber erklären das Gesamtbild nicht sehr gut. Ich verstehe teilweise, was Befehle zum Aufrufen und Delegieren sind, aber ich verstehe nicht wirklich, wie sie interagieren.

Unten ist eine abgespeckte Version dessen, was ich tun möchte. Wie ändere ich dies, um die Fortschrittsanzeige zu aktualisieren, aber das Fenster reagiert und aktualisiert?

Hauptformularklasse:

public partial class Form1 : Form
{
    time_waster thing = new time_waster();

    public Form1()
    {
        InitializeComponent();
        progressBar1.Minimum = 0;
        progressBar1.Maximum = 100;
    }

    private void button1_Click(object sender, EventArgs e)
    {
        thing.something_that_takes_a_while();
    }
}

Separate Worker-Klasse: Klasse time_waster {public time_waster () {}

    public void something_that_takes_a_while()
    {
        int delay = 200;
        for (int i = 0; i < 100; i++)
        {
            Thread.Sleep(delay);
            //appropriate code to update the progress bar for each iteration of the for loop.
        }
    }
}

Antworten auf die Frage(3)

Ihre Antwort auf die Frage