Accediendo a miniaturas que no existen.

He creado una aplicación que presenta una lista de archivos en su computadora. Cada vez que haga clic en cualquier elemento de la lista, un pequeño PictureBox junto a él debería mostrar la miniatura del archivo correspondiente. Estoy usando C # en Windows 7.

Para obtener la miniatura, he recurrido a un método publicado en una pregunta diferente. Primero, hago referencia al paquete de código API de Windows. Luego, uso el siguiente código:

ShellFile shellFile = ShellFile.FromFilePath(fullPathToFile);
myPictureBox.Image = shellFile.Thumbnail.LargeBitmap;

Esto no siempre funciona. A veces, la miniatura que se muestra es simplemente el ícono de 'aplicación predeterminada'. Descubrí que la miniatura real solo se muestra si Windows generó previamente la miniatura para ese archivo y la almacenó en el caché de miniaturas. Esto significa que tengo que abrir una carpeta manualmente, esperar a que Windows genere miniaturas para cada archivo, y luego mi aplicación podrá ver esos pulgares.

¿Cómo puede mi programa forzar a Windows 7 a generar miniaturas reales antes de usarlas?

Actualización (por Li0liQ)

Es posible forzar la recuperación de miniaturas agregando FormatOption:

ShellFile shellFile = ShellFile.FromFilePath(fullPathToFile);
shellFile.Thumbnail.FormatOption = ShellThumbnailFormatOption.ThumbnailOnly;
myPictureBox.Image = shellFile.Thumbnail.LargeBitmap;

sin embargo, estoy recibiendo una excepción en caso de que la miniatura no esté ahí todavía:

El ShellObject actual no tiene un controlador de miniaturas válido o hubo un problema al extraer la miniatura para este objeto de shell específico. ---> System.Runtime.InteropServices.COMException: Clase no registrada (excepción de HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))

Ver¿Cómo actualizo la miniatura de un archivo en el Explorador de Windows? pregunta y codigoretazo para posibles pistas.

Respuestas a la pregunta(4)

Su respuesta a la pregunta