C# Windows Forms - Button farbe nach klick ändern mit zeitlicher verzögerung?
Hallo,
ich mache gerade in C# ein Button, der die Farbe von grau auf Grün ändern soll wenn er geklickt wurde, und nach 3 sekunden soll sich die farbe wieder auf grau zurücksetzen.
Ich hab noch nicht so viel Erfahrung mit Windows Forms, sondern nur mit Console und hab dabei festgestellt das System.Threading.Thread.Sleep(1000); nicht so wie sie soll in Windows Forms funktioniert.
Habt ihr eine Idee wie ich einen Art zeitlichen Abstand einprogrammieren kann?
2 Antworten
![](https://images.gutefrage.net/media/user/Dultus/1719823117497_nmmslarge__0_0_450_450_9e1367268a0c3376f63d5823c5a4b995.png?v=1719823118000)
Moin,
es gibt Timer, die asynchron laufen.
Einfach einen Timer (im Designer oder so) definieren und den Interval auf die gewünschte Zeit stellen;
private void button1_Click(object sender, EventArgs e)
{
timer1.Start();
}
private void timer1_Tick(object sender, EventArgs e)
{
button1.BackColor = Color.Green;
timer1.Stop();
}
LG
![](https://images.gutefrage.net/media/user/Dultus/1719823117497_nmmslarge__0_0_450_450_9e1367268a0c3376f63d5823c5a4b995.png?v=1719823118000)
private async void button1_Click(object sender, EventArgs e)
{
await Task.Delay(3000);
button1.BackColor = Color.Green;
}
Das funktioniert auch.
Dadurch friert das Programm auch nicht ein. Nicht vergessen den async nach dem private zu setzen.
Ist nur eben tiefer im Thema als ein Timer.
![](https://images.gutefrage.net/media/default/user/9_nmmslarge.png?v=1551279448000)
Dankeschön, genau sowas hab ich gesucht
![](https://images.gutefrage.net/media/user/Dultus/1719823117497_nmmslarge__0_0_450_450_9e1367268a0c3376f63d5823c5a4b995.png?v=1719823118000)
![](https://images.gutefrage.net/media/default/user/9_nmmslarge.png?v=1551279448000)
![](https://images.gutefrage.net/media/user/Dultus/1719823117497_nmmslarge__0_0_450_450_9e1367268a0c3376f63d5823c5a4b995.png?v=1719823118000)
da du aus dem Timer-Thread keine über den GUI-Thread erzeugten Objekte ändern kannst.
Öh doch, kannst du.
![](https://images.gutefrage.net/media/user/Dultus/1719823117497_nmmslarge__0_0_450_450_9e1367268a0c3376f63d5823c5a4b995.png?v=1719823118000)
Noch einfacher ist eine asynchrone Methode mit Task.Delay(int ms); :o)
Gibt es aber nicht einfache Art etwas zu verzögern? Bei der Console war es ja nur eine Zeile Code und in Windows Forms ist es etwas mehr aufwendiger