我正在努力找出将图标加载到View.LargeIcon
已使用文件列表初始化的 ListView (in) 中的最佳方法。
我想我将不得不使用一个 ImageList,所以我创建了一个并将其分配给 ListView。我创建了一个 BackgroundWorker 来处理从每个图像加载图标的繁琐工作。
在
DoWork
我使用InvokeRequired
和的组合Invoke
将项目添加到 ListView。这行得通,但它导致 UI 闪烁了一下,看起来并不是特别好。无法ListView.Items
从工作线程内循环意味着必须将 aList<ListViewItem>
作为参数传递。即使我在循环中调用CancelAsync
并检查CancellationPending
并退出如果它是真的,我也很难让 BackgroundWorker 取消。(此时为什么会发生这种情况并不重要。)我尝试使用该
ProgressChanged
事件来处理所有 UI 工作。我调用ReportProgress(0, obj)
whereobj
是一个自定义类,其中包含我希望 UI 线程用来更新 UI(即 ListView)的信息片段。这种方法似乎更有希望。
然而,这两种解决方案对我来说都不是特别优雅,也没有带来特别好的用户体验。我觉得我错过了这个问题的(明显的)解决方案。毕竟,Windows 资源管理器处理图像缩略图的加载比我的应用程序要好得多。不过,我相信 Windows 资源管理器会在 Thumbs.db 中缓存缩略图。
也许上述两种方法中的一种是正确的方法,如果是这种情况,请告诉我,以便我可以更详细地调查该特定解决方案,以找出我做错了什么。
编辑
我忘了提到文件和图标列表是从网络路径加载的。