3

方法 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 次迭代)

4

0 回答 0