2014-03-04 112 views
0

我使用IsolatingStorageSetting來存儲一組對象。當我的應用程序正在運行時,它工作的很好,但是當我重新啓動時...集合是空的...爲什麼它不會將我的對象集合保存在內存中。爲什麼IsolatingStorageSettings爲空時,我重新啓動我的APP? (WP8)

private void llsElements_SelectionChanged(object sender, SelectionChangedEventArgs e) 
     { 

      LongListSelector llselement = null; 
      listElementCollection.Clear(); 

      if (sender != null) 
       llselement =(LongListSelector)sender; 

      if(llselement.SelectedItem!=null) 
      { 
       BdeskElement bdelement=(BdeskElement)llselement.SelectedItem; 

       if (bdelement.TypeElement == BdeskElement.BdeskTypeElement.File) 
       { 

        if (!IsolatedStorageSettings.ApplicationSettings.Contains(bdelement.URLElement))//IsCached? =>NON 
        { 

         if (IsolatedStorageSettings.ApplicationSettings.Count >= 100)//Si la liste des fichiers en cache est pleine 
         { 
          string KeyOldestElement = IsolatedStorageSettings.ApplicationSettings.Last().Key; 
          IsolatedStorageSettings.ApplicationSettings.Remove(KeyOldestElement);//on supprime le dernier élément de la liste 
          if (IsolatedStorageOperations.IsFileSaved(KeyOldestElement+bdelement.Extension)) 
          IsolatedStorageOperations.DeleteFile(KeyOldestElement+bdelement.Extension); 

         } 

         IsolatedStorageSettings.ApplicationSettings.Add(bdelement.URLElement, bdelement);//on ajoute notre élément 

         DownloadAndReadFile(bdelement); 

        } 

        else //Si le fichier est deja présent dans la liste (donc déja en cache) 
        { 
         if (IsFileModified(bdelement, IsolatedStorageSettings.ApplicationSettings[bdelement.URLElement]))//compare la version téléchargée et la version en cache/ les versions sont identiques 
         { 
          string FileNameFormated = bdelement.URLElement.Replace("/", "_").Substring(7, bdelement.URLElement.Length - 7); 
          if (IsolatedStorageOperations.IsFileSaved(FileNameFormated)) 
          { 
           MessageBox.Show("Le fichier est lu dans le cache"); 
           byte[] Encryptedbytefile = IsolatedStorageOperations.GetFile((FileNameFormated)); 
           byte [] UnCryptedByteFile=EncryptedString.DecryptDataToData(Encryptedbytefile); 
           IsolatedStorageOperations.SaveToFile(UnCryptedByteFile, "FileToRead" + bdelement.Extension); 
           IsolatedStorageOperations.ReadFile("FileToRead"+bdelement.Extension); 

          } 

         } 

         else//les versions sont différentes 
         { 
          IsolatedStorageSettings.ApplicationSettings.Remove(bdelement.URLElement);//supprime l'ancienne version 
          IsolatedStorageSettings.ApplicationSettings.Add(bdelement.URLElement, bdelement);//ajoute la nouvelle 

          DownloadAndReadFile(bdelement); 
         } 


        } 
       } 
       else if (bdelement.TypeElement == BdeskElement.BdeskTypeElement.Folder) 
       { 

        //l'élément cliqué devient l'élément courant 
        App.CurrentFolder = bdelement; 
        //On raffiche la page 
        NavigationService.Navigate(new Uri(String.Format("/Views/BDocs/FolderView.xaml?id={0}", Guid.NewGuid().ToString()), UriKind.Relative)); 

       } 
      } 
IsolatedStorageSettings.ApplicationSettings.Save(); //EDITED 
      } 

EDIT

ISSUE我對保存方法

信息supplémentaires:類型 'System.Windows.Media.ImageSource' 不能被序列化。考慮使用DataContractAttribute屬性標記它,並使用DataMemberAttribute屬性標記要序列化的所有成員。或者,您可以確保該類型是公共的,並且具有無參數構造函數 - 該類型的所有公共成員都將被序列化,並且不需要任何屬性。

+0

圖像可能很難保存。如果您繼續有問題,請查看此免費圖書館。 EZ_Iso.dll它內置了保存圖像的功能。您只需要撥打一個電話。 http://anthonyrussell.info/postpage.php?name=2 –

回答

0

可能是因爲你沒有保存它 - 當你使用它時嘗試使用IsolatedStorageSettings.ApplicationSettings.Save()

當你重新啓動模擬器時,它當然不起作用 - 重新啓動後它是一個新的實例。

編輯 - OP的編輯後

您不能序列ImageSource - 類似的問題是here。請考慮序列化ImagePath。

+0

Ahah是啊我發佈了這條消息後30秒我明白了我的錯誤......但我有一個錯誤,我不明白...我編輯帖子... –

+0

對不起,我的意思是當我重新啓動應用程序...哦,該死的我的對象有一個屬性,這是一個BitmapImage ...我想這個問題來自那裏..這真的很討厭.. :(感謝您的幫助; ) –

+0

@PaulMartinez考慮序列化ImagePath,如果你真的需要序列化圖像,[這個答案可能有幫助](http://stackoverflow.com/a/7262418/2681948)。 – Romasz

相關問題