Пишу программу - файловый менеджер. Использую компонент ListView для отображения файлов и папок. Для добавления иконок к файлу или папке использую следующий код:
| Код | public partial class Main_Form : Form {
[StructLayout(LayoutKind.Sequential)] public struct SHFILEINFO { public IntPtr hIcon; public IntPtr iIcon; public uint dwAttributes; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)] public string szDisplayName; [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)] public string szTypeName;
};
class Win32 { public const uint SHGFI_ICON = 0x100; public const uint SHGFI_LARGEICON = 0x0; // 'Large icon public const uint SHGFI_SMALLICON = 0x1; // 'Small icon
[DllImport("shell32.dll")] public static extern IntPtr SHGetFileInfo(string pszPath, uint dwFileAttributes, ref SHFILEINFO psfi, uint cbSizeFileInfo, uint uFlags); }
|
Продолжение...
| Код | IntPtr hImgSmall; //the handle to the system image list IntPtr hImgLarge; //the handle to the system image list string fName; // 'the file name to get icon from SHFILEINFO shinfo = new SHFILEINFO();
FoldersImageList.Images.Clear(); listView.SmallImageList = FoldersImageList;
DirectoryInfo[] dirs = theFolder.GetDirectories();
for (int i = 0; i < dirs.Length; i++) { listView.Items.Add(dirs[i].Name); fName = dirs[i].FullName; hImgSmall = Win32.SHGetFileInfo(fName, 0, ref shinfo, (uint)Marshal.SizeOf(shinfo), Win32.SHGFI_ICON | Win32.SHGFI_SMALLICON); System.Drawing.Icon myIcon = System.Drawing.Icon.FromHandle(shinfo.hIcon);
FoldersImageList.Images.Add(myIcon); listView.Items[i].ImageIndex = 0; }
|
Проблема в том, что после некоторого времени работы программы происходит исключение OutOFMemoryException. Сообщение говорит о том, что невозможно добавить элемент Icon в FoldersImageList. Не могу понять причину. Помогите пожалуйста. |