寫程式的時候常常會遇到的一種狀況,要處理大量資料時可能會讓整個程式當掉,在迴圈裡面有時候也會同時更新控制項的內容,但是畫面上並不會更新,例如以下的Code
private void button1_Click(object sender, EventArgs e) { lblHint.Text = "資料處理中請稍候..."; for (int i = 0; i <= 1000; ++i) { lblHint.Text = "正在處理資料..." + i.ToString(); } lblHint.Text = "資料處理完畢"; } |
當按鈕按下去的時候,程式就會花不少時間去處理迴圈的資料,最後出現"資料處理完畢"的訊息就結束了,預期會出現的"資料處理中請稍候…"等訊息就不會出現,之前遇到這種問題,我都會寫一個Thread來處理,可是這樣做非常的麻煩,因為要顧慮到太多事情了,後來發現了BackgroundWorker這個控制項,可以幫我省去不少寫Thread的麻煩,但對於比較簡單的問題就有點殺機用牛刀的感覺了。
之前Google了一下,是有找到解法的,最近剛好又要用到,就順便記錄一下啦!遇到這種問題其實只要加入以下代碼
Application.DoEvents(); |
強制讓程式暫停一下給控制項更新資料就可以了,簡單明瞭!整個Code看起來就變成這樣
private void button1_Click(object sender, EventArgs e) { lblHint.Text = "資料處理中請稍候..."; Application.DoEvents(); for (int i = 0; i <= 1000; ++i) { lblHint.Text = "正在處理資料..." + i.ToString(); Application.DoEvents(); } lblHint.Text = "資料處理完畢"; } |
這樣中間想出現的提示訊息就通通都會出現了,也不會讓客戶端覺得程式是當掉了!當然Application.DoEvents();在VB.NET也是可以運作的!
相關文章 :
