【问题标题】:c# perform commands immediatelyc# 立即执行命令
【发布时间】:2015-04-11 20:51:15
【问题描述】:
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 毫秒更改一个按钮的颜色,所以我可以看到一个清晰的顺序,首先是 button1,然后是 button2,以此类推。

【问题讨论】:

    标签: c# winforms


    【解决方案1】:

    您需要在每次更改后添加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);
       }
    }
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-09-02
        • 1970-01-01
        • 1970-01-01
        • 2011-08-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多