2012-04-03 2 views
0

Этот код меняет цвет bg только один раз. Что мне нужно добавить, чтобы заставить его работать?Переключение управления backColor fast

int i=0; 
     while (i<50) 
     { 
      button1.BackColor = Color.White; 
      Thread.Sleep(20); 
      button1.BackColor = Color.Black; 
      Thread.Sleep(20); 
      i++; 
     } 
+0

sleep 20 почти эквивалентен 0. возможно, вы только * видите * одно изменение цвета? Что вы пытаетесь достичь, вероятно, лучший способ сделать то, что вы пытаетесь сделать. –

+1

См. Http://stackoverflow.com/q/952906/ –

+0

Но Sleep() ing в основном потоке для 50 * 40 мс - не очень хорошая идея. –

ответ

2

Даже если вы измените аргумент сна к чему-то большему, если вы работаете в том же потоке, где форма операционной (основной поток), вы не увидите никаких изменений, потому что вы блокирует основной поток; вместо этого вы должны либо использовать другой поток, либо просто использовать компонент Timer форм Windows.

int i; 
    public Form1() 
    { 
     InitializeComponent();    
     System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer(); 
     timer.Interval = 200; 
     timer.Tick += new EventHandler(timer_Tick); 
     this.BackColor = Color.White; 
     timer.Start(); 
    } 

    void timer_Tick(object sender, EventArgs e) 
    { 
     if (this.BackColor == Color.White) 
      this.BackColor = Color.Black; 
     else 
      this.BackColor = Color.White; 
    } 
Смежные вопросы