【发布时间】:2013-04-15 08:13:48
【问题描述】:
在我的应用程序中,我使用下面提到的帮助方法将我的独立存储图像绑定到图像控件。我从链接“Binding Image stored in the Isolated Storage to Image Control in Windows Phone”得到了这个辅助方法
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);
}
}
});
}
}
}
我在 ListBox 控件中使用它。如果尝试使用默认库图像,一切都会按预期工作。但是,如果我尝试使用大尺寸的图像(通过设备相机拍摄),应用程序就会崩溃。
这是我得到的例外
System.Windows.ni.dll 中出现“System.OutOfMemoryException”类型的异常,但未在用户代码中处理
堆栈跟踪
在 MS.Internal.FrameworkCallbacks.NotifyManagedDebuggerOnNativeOOM() 在 MS.Internal.XcpImports.BitmapSource_SetSource(BitmapSource bitmapSource, CValue& byteStream) 在 System.Windows.Media.Imaging.BitmapSource.SetSourceInternal(流流源) 在 System.Windows.Media.Imaging.BitmapImage.SetSourceInternal(流流源) 在 System.Windows.Media.Imaging.BitmapSource.SetSource(流流源) 在 MyaPP.Common.IsoStoreImageSource.c__DisplayClass4.c__DisplayClass6.b__1(Object _)
【问题讨论】:
-
您的列表视图中有多少张图片?他们多大?您可以在您的应用程序(Visual Studio 中的
Debug -> Start Windows Phone Application Analysis -> Profiling -> Memory)上运行内存分析并发布您的结果吗? -
尝试使用 LongListSelector 作为平面列表
-
@Haspemulator :这里提到了这个问题“stackoverflow.com/questions/15700340/…”、“blogs.developpeur.org/kookiz/archive/2013/02/17/…”,我如何通过你的实现来解决这个问题。
-
我也面临同样的问题。 @Haspemulator,我执行了内存分析并得到了上述博客中提到的类似响应。您能否更新此问题的解决方案。
标签: windows-phone-7 windows-phone-8 windows-phone