Aktualizowanie paska postępu w GUI C # z innego wątku i klasy [duplikat]

Możliwy duplikat:
Aktualizacja paska postępu z innego wątku

W moim programie chciałem oddzielić funkcje inne niż GUI do innej klasy i pozostawić rzeczy związane z GUI w klasie głównej. Mam jednak problemy z aktualizacją paska postępu, podczas gdy jedna z metod roboczych w klasie robotniczej wykonuje swoje zadanie. Wiem, że będę musiał pracować z wielowątkowością tutaj, ale nie rozumiem jak. Być może brakuje mi prostych rzeczy, ale gdy szukam informacji na ten temat, wydaje się, że większość samouczków mówi o szczegółach, ale nie wyjaśniają zbyt dobrze tego obrazu. Częściowo rozumiem, czym są polecenia wywołania i delegowania, ale tak naprawdę nie rozumiem, jak one oddziałują.

Poniżej znajduje się uproszczona wersja tego, co chcę zrobić. Jak zmodyfikować to, aby zaktualizować pasek postępu, ale zachowuję czułość i malowanie okna?

Główna klasa formularza:

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();
    }
}

Oddzielna klasa robotnicza: class 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.
        }
    }
}

questionAnswers(3)

yourAnswerToTheQuestion