加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – DataGridView的魔力

发布时间:2020-12-15 08:41:10 所属栏目:百科 来源:网络整理
导读:我有一个 Windows窗体,包含一个文本框和一个datagridview.一旦文本框的文本发生更改,datagridview的数据源就会更新.它通过处理文本框的TextChanged事件并为数据源分配新的List来完成.通常,新数据源包含1000行,数据量相当大.此外,查询数据库以获取此列表也很
我有一个 Windows窗体,包含一个文本框和一个datagridview.一旦文本框的文本发生更改,datagridview的数据源就会更新.它通过处理文本框的TextChanged事件并为数据源分配新的List来完成.通常,新数据源包含1000行,数据量相当大.此外,查询数据库以获取此列表也很耗时.

让我感到惊讶的是,如果我在文本框中输入的速度足够快,那么datagrid会一次又一次地暂停渲染,并且只会渲染最终结果.它完全忽略了中间结果.这是有道理的,因为在连续的文本更改期间运行的UI线程正忙.但为什么我仍然可以输入文本框?

> TextChange
>获取数据
>刷新DataGridView(无渲染/绘画)
> TextChange
>获取数据
>刷新DataGridView(无渲染/绘画)
> … TextChange
>获取数据
>刷新DataGridView(最终渲染/绘画)
>完成.

这就像文本框在另一个线程上,但绝对不是.有人知道为什么吗?

解决方法

这不是DataGridView特有的,任何Windows窗口都自动具有此功能.它由消息队列提供,消息队列是与显示窗口的线程相关联的数据结构.当线程忙于执行其他操作时,Windows会在输入事件(如鼠标按键单击或键盘按键)上向队列添加消息.

一旦线程完成它正在做的事情,它就会重新进入消息循环(由Application.Run()启动的循环),从队列中检索消息并处理它.哪个回合导致TextChange事件触发.因此,可视化队列的好方法是作为缓冲区.默认情况下,它最多可以存储10,000个事件.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读