Как менять цвет фона WF раз в секунду n раз в c#?
Кнопка button1 нажимается 1 раз, вместо 10(заложено через цикл for).
Неоходимо организовать смену цвета фона WF раз в секунду 10 раз.
namespace WfChangeColor
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
for (int i = 0; i < 10; i++)
{
button1.PerformClick(); //нажатие кнопки 10 раз???
}
}
private void button1_Click(object sender, EventArgs e)
{
changeFormColor(); //меняет цвет через секунду
}
public void changeFormColor()
{
Thread.Sleep(1000);
Random random = new Random();
this.BackColor = Color.FromArgb(random.Next(256), random.Next(256), random.Next(256));
}
}
} ```
Ответы (2 шт):
Автор решения: demonplus
→ Ссылка
Sleep использовать не надо, он будет блокировать UI поток, вместо него нужен таймер. В конструкторе заводите его:
var timer = new Timer();
timer.Interval = 1000;
timer.Tick += new EventHandler(timer_Tick);
timer.Start();
Интервал поставите тот, который нужен вам.
void timer_Tick(object sender, EventArgs e)
{
// тут ваш код по смене цвета
Random random = new Random();
this.BackColor = Color.FromArgb(random.Next(256), random.Next(256), random.Next(256));
}
Зачем нажимать кнопку 10 раз я не знаю, но таймер можно запускать по нажатию кнопки в button1_Click, если надо.
Автор решения: Алексей Обухов
→ Ссылка
Можно и без таймера обойтись. С минимальными изменениями в вашем коде:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private async void Form1_Load(object sender, EventArgs e)
{
for (int i = 0; i < 10; i++)
{
await Task.Delay(1000);
button1.PerformClick();
}
}
private void button1_Click(object sender, EventArgs e)
{
ChangeFormColor();
}
private void ChangeFormColor()
{
Random random = new Random();
this.BackColor = Color.FromArgb(random.Next(255), random.Next(255), random.Next(255));
}
}