使用C#

时间:2016-07-23 07:54:36

标签: c# loops for-loop colors thread-sleep

我正在尝试将文本框的颜色更改为绿色,然后淡出为白色作为确认方法。这是我到目前为止的代码:

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秒才能做其他事情,但颜色一直保持白色。

1 个答案:

答案 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 )。因此,您可能需要稍微增加延迟以注意不同延迟之间的差异。