短时间更改按钮颜色

时间:2014-06-08 11:44:29

标签: c# button backcolor

我想将按钮的背景颜色更改几秒钟,然后将其更改为正常。由于某种原因,它根本不起作用,我必须等待那些秒,我测试的一些东西也可以工作,但backgroundcolor没有改变。这是我到目前为止所尝试的:

private void button1_Click(object sender, EventArgs e)
{
    button1.BackColor = Color.Lime;
    Thread.Sleep(2000);
    button1.BackColor = SystemColors.Control;
}

希望有人可以帮我解决这个问题!

3 个答案:

答案 0 :(得分:5)

如上所述Horaciux,您可以使用Timer对象来执行此操作。

或者,您可以使用awaitTask.Delay,如Jon Skeet在this回答中提到的那样。

private async void button1_Click(object sender, EventArgs e)
{
    button1.BackColor = Color.Lime;
    await Task.Delay(2000);
    button1.BackColor = SystemColors.Control;

}

Thread.Sleep的问题在于它是阻止操作 - 因为它会阻止相关线程上发生的任何事情。但也有other issues - 主要是Thread.Sleep并不保证在指定的时间内重新激活线程。当你执行Thread.Sleep时,你基本上告诉CPU你的线程不需要在指定的时间内处于活动状态 - 但是,CPU只保证它不会在那个时候处理它 - 它并不保证它会在那个时候重新激活,仅仅是在睡眠期后的某个时刻(一旦它处理完当前活动的任何其他线程)。

由于您要将Thread.Sleep添加到UI线程,因此您可以在睡眠期间有效地锁定整个应用程序。另一方面,await Task.Delay不会阻止该线程,但是一旦await中的任务完成(在这种情况下,就是一个Delay动作),它将返回到函数中的那行代码)。这允许所有其他方法继续正常运行(按钮点击将正常工作等)。这种方法的另一个优点是可以将所有相关代码保存在一个地方,而不是将其中的一部分放在不同的方法中。

答案 1 :(得分:4)

你需要一个计时器。 将工具箱中的计时器控件添加到表单中。双击它以添加计时器刻度事件处理程序

    private void button1_Click(object sender, EventArgs e)
    {
        button1.BackColor = Color.Lime;
        //Set time between ticks in miliseconds.
        timer1.Tick=2000;
        //Start timer, your program continues execution normaly
        timer1.Start;
        //If you use sleep(2000) your program stop working for two seconds.

    }
        //this event will rise every time set in Tick (from start to stop)
        private void timer1_Tick(object sender, EventArgs e)
        {
          //When execution reach here, it means 2 seconds have passed. Stop timer and change color
          timer1.Stop;
          button1.BackColor = SystemColors.Control;
        }

答案 2 :(得分:0)

如果您正在使用XAML技术,也可以使用Storyboard。我没有发布实施细节,因为它们可能会因目标技术而异。