Q: | 有一程式含有兩個 Form, 其中 Form2 的 Picture 屬性設定成一圖片, 而以下是
Form1 顯示 Form2 的程式:
以上程式的目的是希望顯示 Form2 的圖片兩秒之後, Form1 才繼續執行, 結果竟然是 2 秒之後, Form2 的圖片才顯示出來。 為什麼圖片會延遲顯示呢? 解決之道又如何? |
||
A: | 一般而言, 繪圖會比一般的指令來得費時, 因此, Windows 會延後繪圖指令的執行,
也就是說, 直到其他指令都執行完畢之後, 才會輪到繪圖指令的執行, 在以上的
Form1 程式中, 由於呼叫 Form2.Show 之後, 又執行了一個費時 2 秒的 While
迴圈, 因此, Form2 的圖片必須等待 2 秒鐘, 才會被描繪出來。
解決的方法有二: 方法一: 在 While 迴圈中增加 DoEvents 的敘述, 如下:
DoEvents 的作用是「短暫地停止執行」, 由於此一暫停之動作, 使得繪圖指令有機會被執行, 於是 Form2 的圖片便可以在 While 迴圈執行的階段就被顯示出來。 方法二: 在 Form2.Show 之後, 立刻呼叫 Form2.Refresh, 如下:
Refresh 的作用是告訴 Windows, 不管繪圖動作有多慢, 現在立刻把圖畫出來, 當然, Windows 會照辦的。 |