NET Framework异步获取文件图标

时间:2019-09-03 12:10:58

标签: .net file asynchronous io icons

我注意到System.Drawing.Icon.ExtractAssociatedIcon(String)花费大量时间处理大量文件,并且由于它是同步的,所以即使我做一些聪明的事情(例如保留以前看到的文件扩展名的字典),它也会冻结UI。

this question的作者提出了另一种方法,即使用SHGetFileInfoA本质上也是同步的,但是this question about using that function with native C++的注释者暗示了其异步使用的潜力。

是否有一种以纯异步方式获取文件图标的方法,即通过让磁盘控制器执行工作,为其他工作释放线程的方式?还是我被迫使用Task.Run或类似的东西?

1 个答案:

答案 0 :(得分:0)

您可以根据需要选择几种方法。

上次这样做时,我在启动时建立了一个图标缓存,在注册表中遍历每种扩展类型(或在其他地方定义的静态列表)。这可能是最简单的方法。如果这样做会使启动速度过慢,则可以将其作为后台任务,并进行任何需要缓存等待构建的操作。

当然,每当需要图标时,您都可以按照建议的方式创建任务。我仍然会将任务缓存在字典中,这样您就不会对同一个图标进行多次查找。