多線程執行,加快使用者的體感

  • 42
  • 0

多線程執行,加快使用者的體感

多做不一定是好事,有時會讓使用者體感更慢

 

最近有寫一隻程式

是做即時運算佣金的功能

使用者反應很慢

看一下原本的code是逐筆讀取資料再逐筆更新

把它改成整批作業

1次讀取就計算好並更新

 

上線後

使用者反應沒有變快

但是依SQL來追踨是有比較快的

 

後來再查看

原來在更新計算時

會另外出現等待視窗並鎖定畫面

計算完後

等待視窗才消失

 

把等待視窗取消

使用者就覺得快很多

但是

使用者在等得計算時會手動誤KEY資料

所以

還是要用等待畫面去鎖定

也通知使用者更新時別動

 

最後決定用TASK去執行更新

使用非同步操作執行長時間運行的操作

把等待視窗留在主程序中

等計算完成再更新 UI,確保在主 UI 線程上執行

CODE很簡單如下

 private void button1_Click(object sender, EventArgs e)
        {
            MESSAGESHOW MSGSHOW = new MESSAGESHOW();
            // 鎖定控制項
            this.Enabled = false;
            // 顯示跳出視窗
            MSGSHOW.Show();

            // 使用非同步操作執行長時間運行的操作
            Task.Run(() =>
            {                
                // 計算佣金
                SETMONEYS_NEW(dateTimePicker1.Value.ToString("yyyyMMdd"));

                // 更新 UI,確保在主 UI 線程上執行
                Invoke(new Action(() =>
                {
                    // 查詢本日來車資料
                    SEARCH(dateTimePicker1.Value.ToString("yyyyMMdd"));

                    // 查詢本日的合計
                    SETNUMS(dateTimePicker1.Value.ToString("yyyyMMdd"));

                    label29.Text = "更新時間" + DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss");
                    // 關閉跳出視窗
                    MSGSHOW.Close();
                    // 解除鎖定
                    this.Enabled = true;
                }));
            });
            
        }

 

自我LV~