Informacja o kolejnym etapie pętli for na Label1.Text

0

Na formie są label i button
Po Button_Click

            for (etap = 0; etap< ileetapow; etap++)
            {
                while (d <= 100000)
                {
                   // zapisy w bazie danych
                   ...
                   ...
                   d=d+1
                }
                //MessageBox.Show(“Etap:”+etap.ToString());   // z tym widać zmiany tekstu na Label1
                Label1.Text = “Etap:”+etap.ToString();
            }
            MessageBox.Show("Koniec.");

Niestety tekst na label1 nie zmienia się. MessageBox też mnie nie urządza, bo trzeba nacisnąć przycisk, a label ma informować o numerze etapu.
Co z tym zrobić?
Niskie ukłony dla pomocnych dłoni :-)

0

zrób to asynchronicznie, a samą operacje zmiany tekstu labela wydziel do dispatchera.

0

rety !!!
to forum jest dla Nowbie,
a odpowiedź superprofesjonalna,
tak więc POZWOLĘ sobie PROSIĆ o bardziej zrozumiałe wytłumaczenie
P.S.
Nie sztuka śpiewać, jak się umie :-)

1

skoro termin asynchroniczności nie jest ci znany, to najprawdopodobniej nie będziesz wiedział jak to zrobić. musisz wpierw dowiedzieć się czym są wątki, taski i słowa kluczowe async i await. bez tego w gui nic nie zrobisz. ewentualnie możesz użyć metody Application.DoEvents(), ale jest to złe rozwiązanie, więc nie powiem jak tego użyć ;)

1
       Task.Factory.StartNew(() => {   
		  for (etap = 0; etap< ileetapow; etap++)
            {
                while (d <= 100000)
                {
                   // zapisy w bazie danych
                   ...
                   ...
                   d=d+1
                }
                //MessageBox.Show(“Etap:”+etap.ToString());   // z tym widać zmiany tekstu na Label1
                this.Label1.Dispatcher.Invoke(() => this.Label1.Text = “Etap:”+etap.ToString());
            }
            MessageBox.Show("Koniec.");
		)};

coś takiego, jeśli wpf. jeśli wf to użyj delegate

1 użytkowników online, w tym zalogowanych: 0, gości: 1