我FlowLayoutPanel
有多个小DataGridView
控件。
我在后台线程中提供控件的数据源。这不是问题的根源。网格必须在"实时"中更新,所以我每秒至少更新一次,为了测试我每次更新设置100ms。它的工作原理,但用户体验非常不连贯,反应迟钝。当我尝试在屏幕上移动控件时,移动不顺畅。
当我在代码中禁用单行时:
control.DataSource = items;
它运行得非常顺畅,没有任何关键,但当然我没有网格中的数据。我从数据库读取数据,在代码中处理,但不显示。所有这些操作都不需要占用大量的CPU或IO时间,我的机器几乎无所事事。
如何阻止网格更新阻止UI? Invoke或BeginInvoke没有帮助。相同的线程,相同的消息循环。有没有办法进行非阻塞更新?
增加更新间隔并没有多大帮助 - hickup发生次数较少,但总是会发生,这在用户试图将控件从一个窗口移动到另一个窗口时非常令人不安。可拖动控件的功能对于应用程序至关重要。除了创建自己的低级优化DGV之外,还有什么需要改进的用户体验吗?
不,我不会在这里粘贴我的代码,它太大了,而且大部分与问题完全无关。问题很简单。我在内存DataSet
对象中准备好了数据。我只需要将它传递给DataGridView
控件,而不需要在" dgv.DataSource = myDataTable"操作