Почему мои изображения иногда перезагружаются (и WriteableBitmaps исчезают) при возобновлении?

Когда я возобновляю свое приложение, иногда оно теряет свои изображения. Я могу воспроизвести это даже в тривиальных приложениях.

Это проявляется двумя различными способами, в зависимости от того, откуда пришло изображение:

Если бы я сделал что-то вроде<Image Source="/Assets/Logo.png"/> (т.е. загрузка изображения из пакета моего приложения по URI), изображение на короткое время исчезнет, а затем перезагрузится. Это легче увидеть, когда на экране много изображений; они перезагружаются последовательно, поэтому я могу наблюдать за пульсацией загрузки изображения по экрану.Если бы я создалWriteableBitmap и привязать его к Image.Source, тогда растровое изображение полностью исчезнет, никогда не возвращаться.

Я мог бы, вероятно, с этим смириться, если бы он просто перезагружал изображения (хотя эффект ряби неприятен), но я довольно много динамически генерирую изображения, и это не здорово, что все мои WriteableBitmaps исчезают.

Это происходит не каждый раз, когда приложение приостанавливается и возобновляется, только иногда. Я не придумал надежного случая для воспроизведения, но кажется, что чем дольше он приостановлен, тем больше я занимаюсь тем временем (серфинг в Интернете в настольном Chrome, игра в полноэкранные игры DirectX, такие как TapTiles и Microsoft Minesweeper) , более вероятно, что когда я вернусь к своему приложению, изображения будут потеряны. (Приложениене завершается и перезапускается - это все тот же экземпляр приложения.)

Интересно, это как-то связано с вымыванием изображений из видеопамяти. Но я понятия не имею, как проверить эту гипотезу, поэтому на данный момент это только предположение.

До сих пор я не нашел способа для моей программы сказать, что WriteableBitmaps теряется. Последовательность событий идентична обычной приостановке и возобновлению:

Window.Current.Acactive срабатывает с args.WindowActivationState == ДеактивированоWindow.Current.VisibilityChanged срабатывает с args.Visible == falseПрименение. Приостановка пожаров(Время проходит)Применение. Возобновление пожаровWindow.Current.VisibilityChanged срабатывает с args.Visible == trueWindow.Current.Acactive запускает с args.WindowActivationState == CodeActivation

Мне не повезло найти событие «и, между прочим, все ваши изображения исчезли».WriteableBitmap нет событийОбраз имеет события ImageOpened и ImageFailed, но они срабатывают только при загрузке изображения из URI - они никогда не срабатывают, когда Source является WriteableBitmap.

Мне удалось воспроизвести это в тривиальных приложениях, так что это не вызвано какой-то сторонней библиотекой. Пустая страница с изображением, загруженным с помощью URI, снова запустит ImageOpened (и изображение кратковременно замигает, прежде чем завершит перезагрузку), если приложение было приостановлено на некоторое время, а затем вы возобновите его. Пустая страница с изображением, инициализированным в WriteableBitmap, исчезнет, если приложение будет приостановлено на некоторое время, а затем вы возобновите его.

Как я могу исправить потерю WriteableBitmaps (и, если возможно, тоже изображения content-URI)? Есть ли способ, которым я могу предотвратить потерю изображений в первую очередь? Если нет, могу ли я определить, что они были потеряны, и могу ли я заново создать свои WriteableBitmaps?

(Что касается бонусных баллов, я хотел бы знать,Почему изображения исчезают, но эта часть не является обязательной. Я давно разочаровался в ожидании WinRT, чтобы иметь смысл.)

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

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