Обновление индикатора выполнения в 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.
}
}
}