如何异步地以虚拟模式填充ListView?

4
我想在一个列表视图中展示数据库的记录,但是检索需要很长时间。我可以使用RetrieveVirtualItem告诉我何时需要新的ListViewItem,添加虚拟项并开始检索;但是当数据库返回记录时,我该怎么办?在VirtualMode下,我无法更新ListView的Items集合。是否有一种方法告诉ListView重新加载项?或者我只能保持对ListViewItem的引用并填充它?如果这两种方式都不行,还有什么其他方式可以异步地在虚拟模式下填充ListView?
1个回答

9
您的RetrieveVirtualItem处理程序将在ListView需要更新时被调用。如果您的数据尚不可用且不能等待,则必须创建一个虚拟项(不处理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

我希望这有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接