C# Winfrom异步加载数据防止界面假死
需求如上图所示:界面中有3个数据控件。
第一个数据控件中有两列需要进行单元格编辑。
1 private void gvforecast_ShowingEditor(object sender, CancelEventArgs e) 2 { 3 GridView view = sender as GridView; 4 string fieldName = view.FocusedColumn.FieldName; 5 //如果列名是"Forecast"且Locked列值不等于N,则不可以编辑 6 if ((fieldName == "Forecast"|| fieldName=="WForecast") && !DisableEditCell(view, view.FocusedRowHandle)) 7 { 8 e.Cancel = true; 9 } 10 }
第二个数据控件和第三个控件为明细数据。
操作要求:进行单元格编辑时同时加载明细数据。
正常操作情况在第一个Grid单元格编辑事件中同时加载数据,但是会出现界面假死状态。只有明细数据加载完成后,单元格才能获取到光标。这样用户体验度不好,为了提高用户体验我想到的解决方案是异步加载明细数据。
关键字:async、await、Task<T>、Task。至于这几个关键字的原理不做解释,直接上代码
1 private Task<DataSet> GetData(string week,string branch,string pol,string schCode) 2 { 3 return Task.Run<DataSet>(() => 4 { 5 return FeederForecastBiz.GetDataSet(week, branch, pol, schCode); 6 } 7 ); 8 }
1 private async void LoadData(string week, string branch, string pol, string schCode) 2 { 3 DataSet ds = await GetData(week, branch, pol, schCode); 4 if (ds != null) 5 { 6 DataTable tableTeu = ds.Tables["tableTeu"]; 7 DataTable tableBk = ds.Tables["tableBk"]; 8 if (tableTeu != null && tableTeu.Rows.Count > 0) 9 { 10 this.gdReceiveTeu.DataSource = tableTeu; 11 InitGridColumn(gvReceiveTeu); 12 } 13 if (tableBk != null && tableBk.Rows.Count > 0) 14 { 15 this.gdBk.DataSource = tableBk; 16 InitGridColumn(gvBk); 17 } 18 } 19 }
关键代码如上,然后我们直接调用加载数据方法即可。卡顿现象消除
---------------------------------------------------
Devexpres GridControl列自适应宽度,同时开启滚动条
设置:
AutoColumnWith=false
HorzScrollVisibility:Always
1 private void InitGridColumn(GridView gv) 2 { 3 for (int i = 0; i < gv.Columns.Count; i++) 4 { 5 gv.BestFitColumns(); 6 gv.Columns[i].BestFit(); 7 } 8 }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· 新年开篇:在本地部署DeepSeek大模型实现联网增强的AI应用
· Janus Pro:DeepSeek 开源革新,多模态 AI 的未来
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(三):用.NET IoT库
· 【非技术】说说2024年我都干了些啥