Autor Beitrag
erfahrener Neuling
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 233
Erhaltene Danke: 19

Win 7, Win 10
C#, ASP-MVC (VS 2017 Community), MS SQL, Firebird SQL
BeitragVerfasst: Mi 09.03.16 11:49 
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.
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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 als auch meinen Beitrag (sowie die dort verlinkten) in Kommunikation zwischen Threads durch.
OlafSt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 486
Erhaltene Danke: 99

Win7, Win81, Win10
Tokyo, VS2017
BeitragVerfasst: 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. Praxisbezogener als jedes Tutorial und jeder MSDN-Artikel, den ich bisher sah ;)

_________________
Lies, was da steht. Denk dann drüber nach. Dann erst fragen.
erfahrener Neuling Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 233
Erhaltene Danke: 19

Win 7, Win 10
C#, ASP-MVC (VS 2017 Community), MS SQL, Firebird SQL
BeitragVerfasst: 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..