多线程执行,加快使用者的体感
多做不一定是好事,有时会让使用者体感更慢
最近有写一只程式
是做即时运算佣金的功能
使用者反应很慢
看一下原本的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~