【问题标题】:DataGridView blocks the UI ThreadDataGridView 阻塞 UI 线程
【发布时间】:2010-09-11 21:56:23
【问题描述】:

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

即使 UI Thread 很忙,我应该怎么做才能访问它? 当您使用 DataGridView 时如何“娱乐”用户,或者是否有任何主要功能可以防止 UI 线程被 DataGridView 阻塞?

顺便说一句。我知道 Application.DoEvents 可能会有所帮助,但我不想使用它。

【问题讨论】:

    标签: c# winforms multithreading user-interface datagridview


    【解决方案1】:

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

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

    【讨论】:

    • 你好,谢谢你的回答,你能解释一下你的意思是“降低DataGridView线程相对于UI的优先级”,我怎样才能达到这个效果?
    【解决方案2】:

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

    【讨论】:

    • 嗨,凯文,感谢您的回答。我没有在主帖中指定这一点,但我实际上提到了这个 MSDN 页面。因此,我引入了缓存并将 RowCount 属性设置为小块数据。这有所帮助,但包含 DataGridView 控件的表单仍然被冻结或阻止。这是因为 DGV 控件实际上以 100% 的百分比占用了 Main / UI Thread。最好的问候贾雷克
    • 嗨 Jarek,您可以发布代码 sn-p 吗?我使用 DGV 在虚拟模式下毫无问题地显示大量数据。虽然 DGV 确实有一些其他错误,但我不确定它如何完全占用 UI 线程,除非在没有暂停布局的情况下发生一些繁重的数据绑定。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-17
    • 1970-01-01
    相关资源
    最近更新 更多