方法 1 在数字上看起来很快,但在现实生活中却不是,特别是如果我不使用虚拟化列表(即使它很慢)。我在 IValueConverter 中运行它们,异步的,它看起来很慢。Explorer 会立即执行此操作,但如何操作?是否有更快的方法来获取关联图标?到目前为止,我已经尝试过:
方法一:
ExtractIcon.GetIcon(filename, true);
在哪里
public static System.Drawing.Icon GetIcon(string strPath, bool bSmall)
{
SHFILEINFO info = new SHFILEINFO(true);
int cbFileInfo = System.Runtime.InteropServices.Marshal.SizeOf(info);
SHGFI flags;
if (bSmall)
{
flags = SHGFI.Icon | SHGFI.SmallIcon | SHGFI.UseFileAttributes;
}
else
{
flags = SHGFI.Icon | SHGFI.LargeIcon | SHGFI.UseFileAttributes;
}
SHGetFileInfo(strPath, 256, out info, (uint)cbFileInfo, flags);
try{
return System.Drawing.Icon.FromHandle(info.hIcon);}
catch{
return null;
}
}
在 188 毫秒内执行;(100 次迭代)
方法2。
System.Drawing.Icon.ExtractAssociatedIcon(filename);
执行时间为 661 毫秒;(100 次迭代)