¿Por qué mis imágenes a veces se vuelven a cargar (y WritableBitmaps desaparece) en el currículum?

Cuando reanudo mi aplicación, a veces pierde sus imágenes. Puedo reproducir esto incluso en aplicaciones triviales.

Esto se manifiesta de dos maneras diferentes, según el origen de la imagen:

Si yo hiciera algo como<Image Source="/Assets/Logo.png"/> (es decir, cargando una imagen de mi paquete de aplicaciones por URI), la imagen desaparecerá brevemente y luego se volverá a cargar. Esto es más fácil de ver cuando la pantalla contiene muchas imágenes; se recargan en secuencia, por lo que puedo ver la carga de la imagen en la pantalla.Si he creado unWriteableBitmap y lo unió a Image.Source, entonces el mapa de bits desaparece por completo, para no volver nunca.

Probablemente podría vivir con esto si solo estuviera recargando imágenes (aunque el efecto dominó es desagradable), pero hago bastante generación de imágenes dinámicas, y no es bueno que desaparezcan todos mis mapas de bits Escritables.

Esto no sucede cada vez que la aplicación se suspende y se reanuda, solo algunas veces. No he concretado un caso de reproducción confiable, pero parece que cuanto más tiempo está suspendido y más otras cosas que estoy haciendo en el ínterin (navegar por la web en el escritorio de Chrome, jugar juegos DirectX de pantalla completa como TapTiles y Microsoft Minesweeper) Cuanto más probable sea que, cuando vuelva a mi aplicación, las imágenes se perderán. (La aplicación esno Terminado y relanzado, sigue siendo la misma instancia de aplicación.)

Me pregunto si es algo que ver con las imágenes que se borran de la memoria de video. Pero no tengo idea de cómo probar esta hipótesis, por lo que en este punto es solo una suposición.

Hasta ahora, no he encontrado ninguna manera de que mi programa diga que se están perdiendo los mapas de bits de Writeable. La secuencia de eventos es idéntica a una suspensión y reanudación normales:

Window.Current.Activated se activa con args.WindowActivationState == DesactivadoWindow.Current.VisibilityChanged se activa con args.Visible == falseAplicación. Suspender incendios.(el tiempo pasa)Aplicación.Resuming incendiosWindow.Current.VisibilityChanged se activa con args.Visible == trueWindow.Current.Activated se activa con args.WindowActivationState == CodeActivated

No he tenido la suerte de encontrar un evento "y, por cierto, todas sus imágenes desaparecieron".Mapa de bits No tiene eventos.Imagen tiene los eventos ImageOpened e ImageFailed, pero solo se activan cuando carga una imagen desde un URI; nunca se activan cuando Source es un Mapa de Escritura.

He podido reproducir esto en aplicaciones triviales, por lo que no es causada por alguna biblioteca de terceros. Una página en blanco con una imagen cargada por URI activará ImageOpened nuevamente (y la imagen parpadeará brevemente antes de que termine de volver a cargarse) si la aplicación ha estado suspendida por un tiempo y luego la reanuda. Una página en blanco con una imagen inicializada en WriteableBitmap desaparecerá si la aplicación se ha suspendido por un tiempo y luego la reanuda.

¿Cómo puedo corregir la pérdida de WritableBitmaps (y, si es posible, imágenes de URI de contenido también)? ¿Hay alguna manera de evitar que las imágenes se pierdan en primer lugar? Si no es así, ¿hay alguna manera de que pueda detectar que se han perdido, para poder volver a crear mis mapas de escritura?

(Para puntos de bonificación, me encantaría saberpor qué Las imágenes desaparecen, pero esa parte es totalmente opcional. Hace mucho tiempo que he renunciado a esperar que WinRT tenga sentido.)

Respuestas a la pregunta(2)

Su respuesta a la pregunta