Atualizando uma barra de progresso em uma GUI C # de outro segmento e classe [duplicado]

Duplicata Possível:
Atualizando uma barra de progresso de outro segmento

No meu programa, eu queria separar funções não-GUI para outra classe e deixar coisas relacionadas à GUI na classe principal. No entanto, estou tendo problemas com a atualização de uma barra de progresso, enquanto um dos métodos de trabalho na classe de trabalho está fazendo seu trabalho. Eu sei que vou ter que trabalhar com multithreading aqui, mas não entendo como. Eu posso estar perdendo coisas simples, mas quando procuro por informações sobre isso, parece que a maioria dos tutoriais fala sobre as minúcias, mas não explica muito bem o quadro geral. Eu parcialmente entendo o que invocar e delegar comandos são, mas eu realmente não entendo como eles interagem.

Abaixo está a versão reduzida do que eu quero fazer. Como faço para modificar isso para atualizar a barra de progresso, mas manter a janela responsiva e repintar?

Principal classe de formulário:

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

Classe de trabalho separada: 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