我正在尝试将文本框的颜色更改为绿色,然后淡出为白色作为确认方法。这是我到目前为止的代码:
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秒才能做其他事情,但颜色一直保持白色。
答案 0 :(得分:3)
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);
}
}
请注意,捕获当前上下文,执行延迟然后恢复上下文所花费的时间可能需要相同的时间(大约20ms
)才能实现小延迟(1ms
vs 20ms
)。因此,您可能需要稍微增加延迟以注意不同延迟之间的差异。