使用 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);
    }     
}

请注意,对于小延迟(1ms20ms).因此,您可能需要稍微增加延迟才能注意到不同延迟之间的差异。