我有一个Windows窗体,包含一个文本框和一个datagridview。一旦文本框的文本被更改,数据视图的数据源就会被更新。例如,通过处理textbox的TextChanged事件并为数据源分配一个新列表来完成这一任务。通常,新的数据源包含1000+行,数据量相当大。此外,查询DB以获取此列表也很费时。
令我惊讶的是,如果我在文本框中键入足够快的内容,则datagrid挂起呈现自身,并且它只呈现最终结果。它完全忽略了中间结果。这是有意义的,因为运行的UI线程在连续的文本更改期间很忙。但是为什么我仍然可以输入文本框呢?
就像textbox在另一个线程上一样,但它绝对不是。有人知道为什么吗?
发布于 2012-12-26 20:47:54
这并不是DataGridView所特有的,任何Windows窗口都会自动具有此功能。它由消息队列提供,消息队列是与显示窗口的线程相关联的数据结构。当线程忙着做其他事情时,Windows会在输入事件上向队列添加一条消息,例如鼠标按钮单击或按键盘键。
一旦线程完成了它正在做的事情,它就会重新进入消息循环(由Application.Run()启动的消息循环),从队列中检索消息并处理它。哪个回合会引发TextChange事件。因此,将队列可视化的一个好方法是作为缓冲区。默认情况下,它可以存储多达10,000个事件。
https://stackoverflow.com/questions/14045480
复制相似问题