我有一个 Windows 窗体,包含一个文本框和一个 datagridview。一旦文本框的文本发生更改,datagridview 的数据源就会更新。例如,它是通过处理文本框的 TextChanged 事件并为数据源分配一个新列表来完成的。通常新数据源包含1000+行,数据量相当大。此外,查询数据库以获取此列表也很耗时。
令我惊讶的是,如果我在文本框中输入的速度足够快,数据网格会一次又一次地暂停呈现自己,它只会呈现最终结果。它完全忽略了中间结果。这是有道理的,因为在连续文本更改期间正在运行的 UI 线程很忙。但是为什么我仍然可以在文本框中输入?
- 文本变化
- 获取数据
- 刷新 DataGridView(无渲染/绘画)
- 文本变化
- 获取数据
- 刷新 DataGridView(无渲染/绘画)
- ...文本更改
- 获取数据
- 刷新 DataGridView(最终渲染/绘画)
- 完毕。
就像文本框在另一个线程上一样,但绝对不是。有人知道为什么吗?