Actualización de una barra de progreso en una GUI de C # desde otro hilo y clase [duplicado]

Posible duplicado:
Actualización de una barra de progreso desde otro hilo

En mi programa, quería separar las funciones que no son de GUI a otra clase y dejar las cosas relacionadas con la GUI en la clase principal. Sin embargo, tengo problemas con la actualización de una barra de progreso mientras uno de los métodos de trabajo en la clase de trabajo está haciendo su trabajo. Sé que tendré que trabajar con subprocesos múltiples aquí, pero no entiendo cómo. Puede que solo me falten cosas simples, pero cuando busco información al respecto, parece que la mayoría de los tutoriales hablan sobre los detalles, pero no explican muy bien el panorama general. Entiendo parcialmente qué son los comandos de invocar y delegar, pero realmente no entiendo cómo interactúan.

A continuación se muestra una versión simplificada de lo que quiero hacer. ¿Cómo modifico esto para actualizar la barra de progreso, pero manteniendo la ventana receptiva y repintada?

Clase de formulario principal:

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

Clase de trabajador 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.
        }
    }
}

Respuestas a la pregunta(3)

Su respuesta a la pregunta