找不到该组件。 (在HRESULT中出现异常:0x88982F50)在Windows Phone 8应用程序中将流设置为bitmapimage时

时间:2014-11-13 17:52:44

标签: windows-phone-8

我正在尝试在xml中的现有隔离文件夹中添加一个元素 代码:

    public void writeToXML(List<AppTile> appList)
    {
        // Write to the Isolated Storage
        XmlWriterSettings x_W_Settings = new XmlWriterSettings();
        x_W_Settings.Indent = true;
        using (IsolatedStorageFile ISF = IsolatedStorageFile.GetUserStoreForApplication())
        {
            if (!ISF.FileExists("config.xml"))
            {

                using (IsolatedStorageFileStream stream = ISF.OpenFile("config.xml", FileMode.CreateNew))
                {
                    XmlSerializer serializer = new XmlSerializer(typeof(List<AppTile>));
                    using (XmlWriter xmlWriter = XmlWriter.Create(stream, x_W_Settings))
                    {

                        serializer.Serialize(xmlWriter, appList);

                    }
                    stream.Close();
                }

            }
            else
            {

                string tileName = null;
                string url = null;
                string key = null;
                byte [] tilePic = null;
                XDocument loadedData;
                if (appList != null)
                {
                    foreach (AppTile app in appList)
                    {
                        tileName = app.TileName;
                        url = app.Url;
                        key = app.Key;
                        tilePic = app.TilePic;
                       // tilePic = Encoding.UTF8.GetString(app.TilePic,0,app.TilePic.Length);
                       // tilePic = Encoding.Unicode.GetString(app.TilePic,0,app.TilePic.Length);
                       // var writer = new BinaryWriter(tilePic);


                    }
                    using (Stream stream = ISF.OpenFile("config.xml", FileMode.Open, FileAccess.ReadWrite))
                    {

                        loadedData = XDocument.Load(stream);
                        var RootNode = new XElement("AppTile");

                        RootNode.Add(new XElement("TileName", tileName));
                        RootNode.Add(new XElement("Key", key));
                        RootNode.Add(new XElement("Url", url));
                        RootNode.Add(new XElement("TilePic", tilePic));

                        // Find Root Element And Descedents and Append New Node After That
                        var root = loadedData.Element("ArrayOfAppTile");
                        var rows = root.Descendants("AppTile");
                        var lastRow = rows.Last();
                        lastRow.AddAfterSelf(RootNode);
                    }

                    // Save To ISOconfig.xml File 
                    using (IsolatedStorageFileStream newStream = new IsolatedStorageFileStream("config.xml", FileMode.Create, ISF))
                    {
                        loadedData.Save(newStream);
                        newStream.Close();
                    }
                }

            }
        }
    }

从xml读取时我正在使用xmlWriter并反序列化它以获取List 当我试图访问AppTile类型的tilePic时,我收到错误:无法找到该组件。使用以下代码:: Image img = new Image();

                MemoryStream imgStream = new MemoryStream(NewApp.TilePic);//NewApp is AppTile type
                BitmapImage imgSource = new BitmapImage();
                imgSource.SetSource(imgStream);//here i get error
                img.Source = imgSource;

我最有可能保存的TilePic格式不正确,无法检索。

请帮助!!

2 个答案:

答案 0 :(得分:0)

为什么不在创建SaveJpeg数组时使用byte扩展方法?

这个可能对你有帮助!

Windows Phone - byte array to BitmapImage converter throws exception

答案 1 :(得分:0)

解决了这个问题: 在保存字节数组时,它被编码为某种在读取时无法识别的格式,所以我所做的就是将它保存为字符串。所以更新的代码是:

               else
              {
                string tileName = null;
                string url = null;
                string key = null;
                string tilePicString = null;

                XDocument loadedData;

                System.Windows.Media.Imaging.BitmapImage imgSource = new System.Windows.Media.Imaging.BitmapImage();
                if (appList != null)
                {
                    foreach (AppTile app in appList)
                    {
                        tileName = app.TileName;
                        url = app.Url;
                        key = app.Key;
                        //changed here
                        tilePicString = System.Convert.ToBase64String(app.TilePic);

                    }
                   //same code as above