多线程执行,加快使用者的体感

多做不一定是好事,有时会让使用者体感更慢

 

最近有写一只程式

是做即时运算佣金的功能

使用者反应很慢

看一下原本的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~