Dlaczego moje zdjęcia czasami ładują się ponownie (a WriteableBitmaps znikają) przy wznowieniu?

Kiedy wznawiam aplikację, czasami traci swoje obrazy. Mogę to odtworzyć nawet w banalnych aplikacjach.

Objawia się to na dwa różne sposoby, w zależności od tego, skąd pochodzi obraz:

Gdybym zrobił coś takiego<Image Source="/Assets/Logo.png"/> (tj. ładowanie obrazu z mojego pakietu aplikacji przez URI), obraz zniknie na krótko, a następnie przeładuje. Łatwiej jest to zobaczyć, gdy ekran zawiera wiele obrazów; ładują się kolejno, dzięki czemu mogę obserwować pulsowanie obrazu na ekranie.Jeśli stworzyłemWriteableBitmap i powiązać go z Image.Source, a następnie mapa bitowa znika całkowicie, nigdy nie wracać.

Prawdopodobnie mógłbym z tym żyć, gdyby tylko przeładowywał obrazy (choć efekt falowania jest nieprzyjemny), ale robię całkiem sporo dynamicznego generowania obrazu i nie jest fajnie, aby wszystkie moje mapy WriteableBitmap znikały.

Nie zdarza się to za każdym razem, gdy aplikacja zawiesza się i wznawia tylko czasami. Nie udało mi się zdobyć wiarygodnej sprawy repro, ale wydaje się, że im dłużej jest zawieszone, tym więcej innych rzeczy robię w międzyczasie (surfowanie po Internecie na pulpicie Chrome, granie w pełnoekranowe gry DirectX, takie jak TapTiles i Microsoft Minesweeper) , tym bardziej prawdopodobne, że gdy wrócę do mojej aplikacji, obrazy zostaną utracone. (Aplikacja jestnie rozwiązywanie i ponowne uruchamianie - to nadal ta sama instancja aplikacji.)

Zastanawiam się, czy to ma coś wspólnego z obrazami wypłukiwanymi z pamięci wideo. Ale nie mam pojęcia, jak przetestować tę hipotezę, więc w tym momencie to tylko zgadywanie.

Jak dotąd nie znalazłem sposobu, aby mój program mógł nawet powiedzieć, że utracono mapy WriteableBitmaps. Sekwencja zdarzeń jest identyczna z normalnym zawieszeniem i wznowieniem:

Window.Current.Activated wyzwala za pomocą args.WindowActivationState == DezaktywowanyWindow.Current.VisibilityChanged uruchamia się z args.Visible == falseApplication.Suspending fires(czas mija)Application.Resuming firesWindow.Current.VisibilityChanged uruchamia się z args.Visible == trueWindow.Current.Activated wyzwala za pomocą args.WindowActivationState == CodeActivated

Nie miałem szczęścia w znalezieniu „i przy okazji, wszystkie twoje obrazy odeszły”.WriteableBitmap nie ma wydarzeń.Obraz ma zdarzenia ImageOpened i ImageFailed, ale te są uruchamiane tylko wtedy, gdy ładuję obraz z URI - nigdy nie strzelają, gdy Source jest mapą zapisu.

Udało mi się to odtworzyć w trywialnych aplikacjach, więc nie jest to spowodowane przez bibliotekę innej firmy. Pusta strona z obrazem załadowanym przez URI ponownie uruchomi ImageOpened (a obraz będzie migotał krótko przed zakończeniem ponownego ładowania), jeśli aplikacja została zawieszona na chwilę, a następnie wznowiona. Pusta strona z obrazem zainicjowanym na mapie WriteableBitmap zniknie, jeśli aplikacja zostanie zawieszona na chwilę, a następnie wznowisz ją.

Jak mogę naprawić utratę map WriteableBitmaps (i, jeśli to możliwe, także obrazów URI treści)? Czy w jakiś sposób mogę zapobiec utracie zdjęć? Jeśli nie, czy mogę wykryć, że zostały utracone, więc mogę odtworzyć moje mapy WriteableBitmap?

(Za punkty bonusowe chciałbym to wiedziećczemu obrazy znikają, ale ta część jest całkowicie opcjonalna. Już dawno przestałem oczekiwać, że WinRT ma sens.)

questionAnswers(2)

yourAnswerToTheQuestion