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