Обновление индикатора выполнения в C # GUI из другого потока и класса [duplicate]

Possible Duplicate:
Updating a Progress Bar from Another Thread

В моей программе я хотел отделить не-GUI-функции от другого класса и оставить вещи, связанные с GUI, в основном классе. Однако у меня возникают проблемы с обновлением индикатора выполнения, когда один из рабочих методов в рабочем классе выполняет свою работу. Я знаю, что мне придется работать здесь с многопоточностью, но я не понимаю как. Может быть, я просто упускаю простые вещи, но когда я ищу информацию об этом, кажется, что большинство уроков говорят о мелочах, но не очень хорошо объясняют общую картину. Я частично понимаю, что такое команды вызова и делегирования, но я не совсем понимаю, как они взаимодействуют.

Ниже приведена урезанная версия того, что я хочу сделать. Как я могу изменить это, чтобы обновить индикатор выполнения, но оставить окно отзывчивым и перекрасить?

Основная форма класса:

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

Ответы на вопрос(3)

Ваш ответ на вопрос