2010-09-11 121 views
0

我正在使用DataGridView控件的应用程序。由于有很多数据我使用VirtualMode来使用分页,但即使使用此功能,需要花一些时间来更新DataGridView。所以我创建了一个控制旋转和娱乐用户。不幸的是,这个解决方案存在一些问题,即娱乐控制旋转UI时,线程会处理来自它的任何请求,因为它非常忙于此DataGridView。DataGridView阻止UI线程

即使它太忙,我应该怎么做才能访问UI线程? 如何在使用DataGridView时“娱乐”用户或者是否存在阻止DataGridView阻止UI线程的主线?

btw。我知道Application.DoEvents可能会有所帮助,但我不想使用它。

回答

0

删除DataGridView线程相对于UI的优先级,或者只是偶尔在DGV数据加载函数中引入Thread.Sleep。

结合对应该对页面大小进行排序的小调整。

+0

嗨,谢谢你的回答,你能解释一下你的意思是说“放弃DataGridView线程相对于UI的优先级”,我该如何实现这种效果? – Jarek 2010-09-11 22:16:15

0

我不确定你的实现是什么样的,所以请原谅我,如果你已经知道这一点:将VirtualMode属性设置为“true”不会使DataGridView通过即时加载自动填充。相反,它只是让开发者有能力这样做。如果你使用的是虚拟模式,但仍然一次填充整个事物,那么你真的没有获得任何东西。相反,你必须实现你自己的分页算法。这实际上很容易做到。例如,请看MSDN topic。希望这有助于!

+0

嗨凯文,谢谢你的答案。我没有在主文章中指定,但我实际上提到了这个MSDN页面。所以,我介绍了一个缓存,并将RowCount属性设置为小块数据。这有帮助,但包含DataGridView控件的窗体仍然被冻结或阻塞。这是由于DGV控制字面占据主/用户线程的百分之百。最好的问候Jarek – Jarek 2010-09-12 05:37:58

+0

嗨Jarek,你有可能发布代码片段吗?我使用DGV以虚拟模式显示大量数据而没有问题。虽然DGV确实有其他一些错误,但我不确定它是如何完全绑定UI线程的,除非在布局被暂停的情况下发生了大量的数据绑定。 – 2010-09-12 20:00:52