Hi an alle.
Ich würde gern für einen Test beim Form_load die Hintergrundfarbe eine Textbox ändern. Aber leider sehe ich die Änderung nicht. Nur die letzte Farbe.
tb.BackColor = Color.Blue;
Application.DoEvents();
System.Threading.Thread.Sleep(500);
tb.BackColor = Color.Yellow;
Application.DoEvents();
Wie kriege ich das hin, dass ich die Änderung mitbekomme und was ist der Grund dafür, dass ich das nicht sehe?
Vielen Dank.
Wahrscheinlich liegt es an Warum DoEvents Mist ist!
In diesem Fall auch sehr einfach per Timer lösbar; ohne Threads.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Hallo,
warum willst du eine Farbänderung im Form Load Event machen.
Sichtbar wird es ja eh erst im Form Shown Event;
Wenn Du es mit einem Thread machen willst kannst du es so machen:
private void FormMain_Shown(object sender, EventArgs e)
{
this.textBoxColorChange.BackColor = Color.Green;
System.Threading.Thread t = new System.Threading.Thread(delegate(object o)
{
System.Threading.Thread.Sleep(2000);
this.Invoke((MethodInvoker)delegate
{
this.textBoxColorChange.BackColor = Color.Yellow;
});
});
t.Start();
}
Wenn Du es mit einem Thread machen willst kannst du es so machen
Sollte man aber definitiv nicht so machen - ein Timer ist deutlich besser.
Hallo lnino,
im Grunde ist - wenn schon nicht die Frage, so doch die Lösung - nur eine Variante von [FAQ] Warum blockiert mein GUI? Und wie schon gesagt, ist das ein Fall für einen (System.Windows.Forms.)Timer.
Du solltest dich unbedingt darauf einlassen, dass Windows Forms ereignisgesteuert ist! Und nicht versuchen, längere Abläufe in einem EventHandler zu programmieren. Generell sollte man im GUI-Thread nicht warten, schon gar nicht länger als 1/20s. Und man sollte - wie gesagt - von DoEvents die Finger lassen.
Dass Windows Forms Anwendungen ereignisgesteuert aufgebaut werden müssen, gehört zu den elementaren Grundlagen von Windows Forms. Beachte daher bitte [Hinweis] Wie poste ich richtig? Punkt 1.1.1.
herbivore