[.NET][C#]大量運算的迴圈中更新控制項的辦法

文章分類: C#, 程式設計 / Programing




寫程式的時候常常會遇到的一種狀況,要處理大量資料時可能會讓整個程式當掉,在迴圈裡面有時候也會同時更新控制項的內容,但是畫面上並不會更新,例如以下的Code

?View Code CSHARP
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了一下,是有找到解法的,最近剛好又要用到,就順便記錄一下啦!遇到這種問題其實只要加入以下代碼

?View Code CSHARP
Application.DoEvents();

強制讓程式暫停一下給控制項更新資料就可以了,簡單明瞭!整個Code看起來就變成這樣

?View Code CSHARP
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也是可以運作的!

相關文章 :

  1. [DevExpress][C#]GridControl使用CheckBox的方法

發表回應

Bad Behavior has blocked 9 access attempts in the last 7 days.