W mojej aplikacji używam poniższej metody pomocniczej do wiązania mojego izolowanego obrazu do sterowania obrazem. Mam tej metody pomocnika z linku „Binding Image stored in the Isolated Storage to Image Control in Windows Phone”Aplikacja ulega awarii podczas próby związania izolowanego obrazu pamięci
public class IsoStoreImageSource : DependencyObject
{
public static void SetIsoStoreFileName(UIElement element, string value)
{
element.SetValue(IsoStoreFileNameProperty, value);
}
public static string GetIsoStoreFileName(UIElement element)
{
return (string)element.GetValue(IsoStoreFileNameProperty);
}
// Using a DependencyProperty as the backing store for IsoStoreFileName. This enables animation, styling, binding, etc...
public static readonly DependencyProperty IsoStoreFileNameProperty =
DependencyProperty.RegisterAttached("IsoStoreFileName", typeof(string), typeof(IsoStoreImageSource), new PropertyMetadata("", Changed));
private static void Changed(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
Image img = d as Image;
if (img != null)
{
var path = e.NewValue as string;
SynchronizationContext uiThread = SynchronizationContext.Current;
Task.Factory.StartNew(() =>
{
using (var isoStore = IsolatedStorageFile.GetUserStoreForApplication())
{
if (isoStore.FileExists(path))
{
var stream = isoStore.OpenFile(path, System.IO.FileMode.Open, FileAccess.Read);
uiThread.Post(_ =>
{
var _img = new BitmapImage();
_img.SetSource(stream);
img.Source = _img;
}, null);
}
}
});
}
}
}
Używam tego wewnątrz formantu ListBox. A jeśli spróbujesz z domyślnymi obrazami biblioteki wszystko będzie działać zgodnie z oczekiwaniami. Ale jeśli spróbuję z obrazami o dużym rozmiarze (zrobionym aparatem urządzenia), aplikacja się zawiesza.
I tu jest wyjątek co ja dostaję
wyjątek typu „System.OutOfMemoryException” wystąpiło w System.Windows.ni.dll ale nie było obsługiwane w kodzie użytkownika
ślad stosu
w MS.Internal.FrameworkCallbacks.NotifyManagedDebuggerOnNativeOOM() w MS.Internal.XcpImports.BitmapSource_SetSource (BitmapSource BitmapSource, CValue & byteStream) w System.Windows.Media.Imaging.BitmapSource.SetSourceInternal strumieni (strumień ource) w System.Windows.Media.Imaging.BitmapImage.SetSourceInternal (Stream streamSource) w System.Windows.Media.Imaging.BitmapSource.SetSource (Stream streamSource) w MyaPP.Common.IsoStoreImageSource. <> c__DisplayClass4. <> c__DisplayClass6.b__1 (Obiekt _)
Ile zdjęć posiadasz w widoku listy? Jak duże są?Czy możesz uruchomić analizę pamięci w swojej aplikacji ('Debugowanie -> Uruchom aplikację Windows Phone Application Analysis -> Profilowanie -> Pamięć' w Visual Studio) i zamieścić swoje wyniki? – Haspemulator
Spróbuj użyć LongListSelector jako płaskiej listy – Mahantesh
@ Haspemulator: Problem jest tutaj mowa "http://stackoverflow.com/questions/15700340/out-of-memory-exception-while-loading-images-from-isolated- storage" , "http://blogs.developpeur.org/kookiz/archive/2013/02/17/wpdev-memory-leak-with-bitmapimage.aspx", Jak mogę rozwiązać ten problem z twoją implementacją. –