Entwickler-Ecke

WinForms - Wann werden Felder (Buttons, Labels) aktualisiert?


erfahrener Neuling - Mi 09.03.16 11:49
Titel: Wann werden Felder (Buttons, Labels) aktualisiert?
Halli Hallo,

heute ist mir etwas unerwartetes passiert:
Unzwar habe ich eine Methode, deren Abarbeitung einige Sekunden dauert. Vor Ausführung dieser Methode sollen aber noch einige Felder geändert werden. Zum Beispiel: label.Visible etc (siehe code)
Jetzt ist es so, dass diese Änderungen aber erst NACH Beendigung der besagten Methode in Kraft treten.

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
if ( string.Equals(KDMX_Path, "") ) {
        KDMX_Path = @"\Neu.kdmx";
        label_DateiNameKDMX.Text = Tools.extractFileName(KDMX_Path, '\\');
        label_DateiNameKDMX.Visible = true;
        buttonCloseKDMX.Visible = true;
        buttonSaveKDMX.Visible = true;
        richTextBoxKDMX.Enabled = true;
}

if (checkBoxStepByStepConverting.Checked)
{
    richTextBoxKDMX.AppendText(Program.convertDBMLtoKDMX(DBML_Path, richTextBoxDBML.Text, true));
}
else
{
    richTextBoxKDMX.AppendText(Program.convertDBMLtoKDMX(DBML_Path, richTextBoxDBML.Text, false));
}

Das alles passiert in einer Button_Click-Methode, liegt es also daran, dass Felder erst danach (Button_Click-Methode) wirksam werden?
Kann ich das umgehen, ohne die if-Verzweigungen zu trennen?

Grüße
Neuling


Th69 - Mi 09.03.16 12:19

Hallo,

die Aktualisierung findest erst nach dem Durchlaufen der gesamten Ereignismethode statt, d.h. wenn das Programm die sogenannte Message-Loop abarbeitet.
Wenn du langlaufende Aktionen hast, dann solltest du diese in einem anderen Kontext durchführen, so daß die Ereignismethode nur die Aktion anstartet. Stichpunkte für mögliche Techniken sind BackgroundWorker, Task (bzw. Thread) und Timer.

Lies auch mal Frage zur technischen Funktionsweise einer GUI im Allgemeinen [http://www.entwickler-ecke.de/viewtopic.php?t=108420] als auch meinen Beitrag (sowie die dort verlinkten) in Kommunikation zwischen Threads [http://www.entwickler-ecke.de/viewtopic.php?p=679137#679137] durch.


OlafSt - Mi 09.03.16 13:38

Vor gar nicht mal langer Zeit habe ich mit demselbenProblem gekämpft und mir wurde hier ganz hervorragend weitergeholfen: Probleme mit der GUI-Aktualisierung [http://www.entwickler-ecke.de/viewtopic.php?p=698766#698766]. Praxisbezogener als jedes Tutorial und jeder MSDN-Artikel, den ich bisher sah ;)


erfahrener Neuling - Mi 09.03.16 14:44

Also: mein 'Problem' habe ich erstmal provisorisch durch trennen beider Teile gelöst. Wenn ich morgen die Zeit habe, werd ich mir mal die Stichworte von Th69 reinziehen.

@olaf ja das Problem könnte ich auch bald kriegen, im Moment ist es mir allerdings ein bisschen zu kompliziert, da ich mich noch nie mit asynchronen Sachen auseinandergesetzt habe.

Trotzdem danke dafür, wird mir in Zukunft sicher noch helfen..