【问题标题】:How do I populate a ListView in virtual mode asynchronously?如何在虚拟模式下异步填充 ListView?
【发布时间】:2010-09-25 02:43:23
【问题描述】:

我想在列表视图中显示我们数据库中的记录 - 但检索可能需要很长时间。我可以使用 RetrieveVirtualItem 告诉我何时需要新的 ListViewItem,添加一个虚拟项目,然后开始检索;但是当数据库返回记录时我该怎么办?当 ListView 处于 VirtualMode 时,我无法更新 ListView 的 Items 集合。有没有办法告诉 ListView 重新加载项目?或者我可以只保留对 ListViewItem 的引用并填充它吗?如果这些都不起作用,我还能如何在虚拟模式下异步填充 ListView?

【问题讨论】:

    标签: c# winforms listview asynchronous virtualmode


    【解决方案1】:

    当 ListView 需要更新时,将调用您的 RetrieveVirtualItem 处理程序。如果您的数据尚不可用并且您不能等待,那么您将不得不创建一个虚拟项目(不处理 RetrieveVirtualItem 将引发异常)。

    一旦您的数据准备就绪,您就可以使控件无效 - 这将为每个可见项再次调用 RetrieveVirtualItem。作为使整个控件无效的替代方法,您可以使用 ListView 控件的 RedrawItems 方法控制要重绘的项目,该方法在虚拟和常规模式下工作:

    http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.redrawitems.aspx

    如果需要一段时间,听起来可能值得分批下载您的记录。此外,如果您的数据库操作很昂贵,那么值得研究缓存您的 ListItems(您需要处理一个 CacheVirtualItems 事件):

    http://msdn.microsoft.com/en-us/library/system.windows.forms.listview.cachevirtualitems.aspx

    我希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      • 2011-07-21
      • 1970-01-01
      • 1970-01-01
      • 2012-03-18
      • 2012-01-14
      • 2017-10-08
      相关资源
      最近更新 更多