Потоковая загрузка иконок в Delphi

Используя Delphi 2009, пытаюсь сделать лаунчер. Чтобы сделать его "мгновенным" Я бы очень хотел загрузить иконки в фоновом потоке.

Я использовал решение, найденное здесь: Можно ли получить значки 48x48 или 64x64 в оболочке Vista?

Это прекрасно работает, если НЕ работает в потоке. Как только я помещаю это в поток, некоторые значки не «извлекаются» или являются некими общими значками. Я даже пытался сериализовать потоки (по сути, делая их устаревшими), но это дает те же результаты.

Итак, вопрос в следующем: Как загрузить значки (с такими же доступными опциями, как в связанном примере) в ветке?

/ Lars

Редактировать: Добавлена базовая проверка ошибок в GetIconFromFile

if SHGetFileInfo( PChar( aFile ),
                FILE_ATTRIBUTE_NORMAL,
                SFI,
                SizeOf( TSHFileInfo ),
                SHGFI_ICON
                  or SHGFI_LARGEICON
                  or SHGFI_SHELLICONSIZE
                  or SHGFI_SYSICONINDEX
                  or SHGFI_TYPENAME
                  or SHGFI_DISPLAYNAME ) <> 0 then
begin
  if not Assigned( aIcon ) then
    aIcon := TIcon.Create;
  aImgList := GetImageListSH( SHIL_FLAG );
  aIndex := SFI.iIcon;
  if aImgList <> 0 then
    aIcon.Handle := ImageList_GetIcon( aImgList, aIndex, ILD_NORMAL );
end;

Это не создает никакой разницы. Я все еще получаю некоторые общие иконки (только когда это вызывается в потоке, хотя)

Edit2: Потоковый код (очень простой):

procedure TIconLoader.Execute;
var
  Item : TGridItem;
  I : TIcon;
begin
  inherited;

  while not terminated do
  begin
    Item := nil;
    if assigned(FOnNeedGridItem) then
    begin
      Synchronize(
          procedure
          begin
            FOnNeedGridItem(Self, Item);
          end
      );
    end;

    if assigned(Item) then
    begin
      GetIconFromFile(Item.FFilename, I, SHIL_EXTRALARGE);
      Synchronize(
          procedure
          begin
            Item.SetIcon(I);
          end
      );
//      I.Free;
    end
    else
      Terminate;
  end;
end;

Ответы на вопрос(3)

Ваш ответ на вопрос