2008年8月19日 星期二

使用Application.DoEvents(); 處理windows訊息佇列

此程式片段用來呈現Form背景七彩閃爍的效果

while (this.Visible)

{
  for (int c = 0; (c <>this.Visible); c++)
  {
    this.BackColor = Color.FromArgb(c, 255 - c, c);
    Application.DoEvents();
    System.Threading.Thread.Sleep(1);
  }

  for (int c = 254; (c >= 0) && (this.Visible); c--)
  {
    this.BackColor = Color.FromArgb(c, 255 - c, c);
    Application.DoEvents();
    System.Threading.Thread.Sleep(3);
  }
}

若沒有加上 Application.DoEvents();
則會發現不但背景顏色不會改變
且整個視窗都會當掉, 那是因為進入無線迴圈
視窗根本沒機會去處理重繪的訊息
因為所有關於視窗控制觸發的訊息, 都堆在windows訊息佇列上
所以我們必須在回圈內加上"處理windows訊息"
讓程式有機會去處理

沒有留言:

張貼留言