es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

En UWP, mi aplicación crea un archivo y luego quiero obtener su miniatura, pero devuelve una miniatura incorrecta.

Mi aplicación UWP crea un archivo .jpg, luego utiliza la API storagefile.getThumbnail(). Pero devuelve una miniatura que representa el tipo de archivo jpg común en lugar de mostrar el tamaño pequeño del contenido jpg.
Verifiqué el archivo jpg creado, es un archivo completo, y su miniatura en el explorador es la misma que la de mi aplicación.
Detuve la aplicación, la miniatura del explorador se actualizó inmediatamente, representa el tamaño pequeño de su contenido.
Reinicié la aplicación y ahora puede mostrar correctamente la miniatura correcta.

Supongo que debido al tiempo de ejecución de la aplicación, el sistema operativo de Windows no actualizará la miniatura. Después de detener la aplicación, el sistema operativo realiza su trabajo inmediatamente.

Entonces, ¿hay alguna forma o API para llamar a la actualización del sistema de la miniatura mientras la aplicación está en ejecución?

enter image description here

c#
Manga manga = new Manga(files[i], storageFolder);
MangaList.Add(manga); // Esto es un observableCollection
await manga.EnsureCoverFile(); // crea un archivo jpg
await manga.SetCover(); // obtiene la miniatura del archivo

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Problema con storagefile.getThumbnail() en la aplicación UWP

    Descripción del problema:

    El usuario está enfrentando un problema con la API storagefile.getThumbnail() en su aplicación UWP. Después de crear un archivo .jpg, utilizó esta API para obtener la miniatura del archivo. Sin embargo, la miniatura devuelta representa un tipo de archivo jpg común en lugar de mostrar el contenido jpg de pequeño tamaño.

    Investigación:

    Al revisar el archivo .jpg creado, se observó que el archivo estaba completo y su miniatura en el explorador era la misma que en la aplicación. Sin embargo, cuando el usuario detuvo la aplicación, la miniatura del explorador se actualizó inmediatamente y representó el tamaño pequeño de su contenido. Cuando se reinició la aplicación, pudo mostrar la miniatura correcta.

    Causa probable:

    Es probable que debido al tiempo de ejecución de la aplicación, el sistema operativo de Windows no actualice la miniatura. Después de detener la aplicación, el sistema operativo realizará su trabajo de inmediato.

    Solución propuesta:

    No es posible llamar a una actualización del sistema para las miniaturas mientras la aplicación está en ejecución. Sin embargo, hay algunas soluciones alternativas que se pueden utilizar para actualizar la miniatura.

    Una opción es cambiar el nombre del archivo temporalmente y luego volver a cambiar el nombre a su nombre original. Esto obligará a Windows a actualizar la miniatura. Otra opción es utilizar la función SHChangeNotify de la API de Win32 para notificar al sistema que actualice la miniatura.

    “`c#
    [DllImport(“shell32.dll”)]
    public static extern void SHChangeNotify(int wEventId, uint uFlags, IntPtr dwItem1, IntPtr dwItem2);

    // Uso:
    SHChangeNotify(0x8000000, 0x1000, IntPtr.Zero, IntPtr.Zero);
    “`

    En cualquier caso, es importante tener en cuenta que estas soluciones son soluciones alternativas y no soluciones reales. El problema aún puede persistir en algunos casos, y es mejor evitar confiar en el comportamiento de actualización de las miniaturas en aplicaciones UWP.

Comments are closed.