使用 C# 在循环中淡化颜色
Fading color in a loop with C#
我正在尝试将文本框的颜色更改为绿色,然后逐渐变回白色作为一种确认方法。这是我目前的代码:
private void btnCommit_Click(object sender, EventArgs e)
{
//do stuff
Color c = new Color();
for (int i = 0; i <= 255; i++)
{
c = Color.FromArgb(i, 255, i);
textBox1.BackColor = c;
System.Threading.Thread.Sleep(10);
}
}
没用。似乎只等了 2.5 秒,我就可以做任何其他事情,但颜色一直保持白色。
Thread.Sleep
阻塞你的 UI 线程(如果像你的情况一样使用 UI 线程执行),你必须使用 Task.Delay()
并使你的方法 async
使 UI 响应并查看淡入淡出的动画:
private async void btnCommit_Click(object sender, EventArgs e)
{
//do stuff
Color c = new Color();
for (int i = 0; i <= 255; i++)
{
c = Color.FromArgb(i, 255, i);
textBox1.BackColor = c;
await Task.Delay(10);
}
}
请注意,对于小延迟(1ms
与 20ms
).因此,您可能需要稍微增加延迟才能注意到不同延迟之间的差异。
我正在尝试将文本框的颜色更改为绿色,然后逐渐变回白色作为一种确认方法。这是我目前的代码:
private void btnCommit_Click(object sender, EventArgs e)
{
//do stuff
Color c = new Color();
for (int i = 0; i <= 255; i++)
{
c = Color.FromArgb(i, 255, i);
textBox1.BackColor = c;
System.Threading.Thread.Sleep(10);
}
}
没用。似乎只等了 2.5 秒,我就可以做任何其他事情,但颜色一直保持白色。
Thread.Sleep
阻塞你的 UI 线程(如果像你的情况一样使用 UI 线程执行),你必须使用 Task.Delay()
并使你的方法 async
使 UI 响应并查看淡入淡出的动画:
private async void btnCommit_Click(object sender, EventArgs e)
{
//do stuff
Color c = new Color();
for (int i = 0; i <= 255; i++)
{
c = Color.FromArgb(i, 255, i);
textBox1.BackColor = c;
await Task.Delay(10);
}
}
请注意,对于小延迟(1ms
与 20ms
).因此,您可能需要稍微增加延迟才能注意到不同延迟之间的差异。