加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

windows-phone-7 – 尝试绑定隔离存储映像时应用程序崩溃

发布时间:2020-12-14 04:13:09 所属栏目:Windows 来源:网络整理
导读:在我的应用程序中,我使用下面提到的帮助方法将我的独立存储图像绑定到 Image控件.我从链接“ Binding Image stored in the Isolated Storage to Image Control in Windows Phone”获得了这个帮助方法 public class IsoStoreImageSource : DependencyObject{p
在我的应用程序中,我使用下面提到的帮助方法将我的独立存储图像绑定到 Image控件.我从链接“ 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(Stream streamSource)
在System.Windows.Media.Imaging.BitmapImage.SetSourceInternal(Stream streamSource)
在System.Windows.Media.Imaging.BitmapSource.SetSource(Stream streamSource)
在MyaPP.Common.IsoStoreImageSource.<> c__DisplayClass4.<> c__DisplayClass6.b__1(Object _)

ListBox中的缓存可能会占用您的内存,这对于较大的图像尤其明显.我不熟悉您发布的帮助方法,但尝试添加此方法.
if (img != null)
{
    BitmapImage bitmapImage = img.Source as BitmapImage;
    bitmapImage.UriSource = null;
    img.Source = null;

    //rest of the code ...
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读