首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DataGridView的魔力

DataGridView的魔力
EN

Stack Overflow用户
提问于 2012-12-26 19:50:07
回答 1查看 281关注 0票数 6

我有一个Windows窗体,包含一个文本框和一个datagridview。一旦文本框的文本被更改,数据视图的数据源就会被更新。例如,通过处理textbox的TextChanged事件并为数据源分配一个新列表来完成这一任务。通常,新的数据源包含1000+行,数据量相当大。此外,查询DB以获取此列表也很费时。

令我惊讶的是,如果我在文本框中键入足够快的内容,则datagrid挂起呈现自身,并且它只呈现最终结果。它完全忽略了中间结果。这是有意义的,因为运行的UI线程在连续的文本更改期间很忙。但是为什么我仍然可以输入文本框呢?

  1. TextChange
  2. 取取数据
  3. 刷新DataGridView (无需呈现/绘制)
  4. TextChange
  5. 取取数据
  6. 刷新DataGridView (无需呈现/绘制)
  7. ...TextChange
  8. 取取数据
  9. 刷新DataGridView (最终绘制/绘制)
  10. 好了。

就像textbox在另一个线程上一样,但它绝对不是。有人知道为什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-26 20:47:54

这并不是DataGridView所特有的,任何Windows窗口都会自动具有此功能。它由消息队列提供,消息队列是与显示窗口的线程相关联的数据结构。当线程忙着做其他事情时,Windows会在输入事件上向队列添加一条消息,例如鼠标按钮单击或按键盘键。

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

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14045480

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档