c#立即执行命令

时间:2015-04-11 20:51:16

标签: c# winforms

public void test()
 {
 for(int i=1; int i<5; i++)
  { 
     if(i==1)       
     button1.BackColor=Color.White;
     if(i==2) 
     button2.BackColor=Color.White;
     if(i==3)   
     button3.BackColor=Color.White;
     if(i==4) 
     button4.BackColor=Color.White;
     Thread.Sleep(100);
   }
}

现在,程序等待400毫秒,然后所有4个按钮同时改变颜色。我希望它每次等待100毫秒并且每100毫秒更改一个按钮的颜色,这样我就可以看到第一个按钮1更改的清晰序列,然后按钮2等等。

2 个答案:

答案 0 :(得分:2)

每次更改后都需要添加Application.DoEvents()。您的函数占用了线程,因此在退出之前不会更新UI。

请参阅Application.DoEvents

public void test()
 {
 for(int i=1; int i<5; i++)
  { 
     if(i==1)       
     button1.BackColor=Color.White;
     if(i==2) 
     button2.BackColor=Color.White;
     if(i==3)   
     button3.BackColor=Color.White;
     if(i==4) 
     button4.BackColor=Color.White;

     Application.DoEvents();
     Thread.Sleep(100);
   }
}

答案 1 :(得分:1)

Thread.Sleep(100)阻止UI线程绘制,但您可以使用Refresh方法强制按钮刷新并在每次迭代时更改颜色:

public void test()
{    
        Button[] buttons = new Button[] { button1, button2, button3, button4, };
        for (int i = 0; i < buttons.Length; i++)
        {
            buttons[i].BackColor = Color.White;                
            buttons[i].Refresh();
            Thread.Sleep(100);
        }    
}