none
Problème de Persistance IsolatedStorage RRS feed

  • Question

  • Je viens d'avoir un comportement très bizarre sur mon appli.

    Mon appli possède des tiles qui sont paramétrés avec pas mal d'option dans un écran dédié. Aujourd'hui, je m’aperçois que mes tiles ne sont pas à jour. Sur le fond, c'est possible, j'ai peut être pas lancé mon app depuis 15jours.

    Le problème, c'est que lorsque je lance mon app, il n'y a plus aucuns paramétrages de fait. Le plus visible étant les couleurs. Je me retrouve avec un truc complétement fou : Mon app me confirme qu'elle vient de se lancer pour la 1ere fois, mais les tiles eux affichent mes couleurs habituelles plus les options que j'ai définie.

    Le seul truc que je peux imaginer, c'est qu'au lancement de mon app après 15jours, l'isolated storage ait été réinitialisé. En tout cas, ce comportement explique pourquoi mon background agent n'arrive pas à trouver des données dans l'isolated storage qui sont forcement créés au 1er lancement de mon app.

    Si quelqu'un à une idée, j suis preneur la...

    mardi 30 octobre 2012 12:17

Réponses

Toutes les réponses

  • Bonjour,

    Comment enregistre-tu tes données dans l'isolated storage ? Sont-elles serializés ? Attention notamment aux accès concurrents, voir l'article de Rudy à ce sujet http://www.rudyhuyn.com/blog/2012/06/11/perennite-des-donnees-sous-windows-phone/


    Pour que la discussion puisse être identifiée comme résolue merci de marquer les réponses qui vous ont aidées à solutionner votre problème comme "réponse".

    mardi 30 octobre 2012 14:57
  • En fait, j'utilise ApplicationSettings. Je n'ai pas de problème d'accès concurrent. L'agent lit et l'appli peut lire et modifier.

    Si c'est pas fiable, bah c quand même pas top. Cela voudrait dire que je dois repenser toutes ma gestion de sauvegarde des paramètres.. Ca promets...

    mardi 30 octobre 2012 15:09
  • C'est tout de même étrange ce que tu décris comme phénomène, peut-on avoir les sources concernant l'enregistrement/lecture dans les settings ?

    Pour que la discussion puisse être identifiée comme résolue merci de marquer les réponses qui vous ont aidées à solutionner votre problème comme "réponse".

    mardi 30 octobre 2012 15:18
  • Voila ce que je fais au lancement de mon app pour tous les paramètres :

    Try
                isolatedStore = IsolatedStorageSettings.ApplicationSettings
            Catch e As Exception
                Debug.WriteLine("Exception while using IsolatedStorageSettings: " & e.ToString())
            End Try

    key = "RDV_Prives" If Not isolatedStore.Contains(key) Then isolatedStore.Add(key, True) RDV_Prives = True Else RDV_Prives = isolatedStore(key) End If

    J'utilise toujours le même type de code pour lire que ce soit dans l'app ou dans l'agent

    Ensuite, j'ai ca pour écrire :

    Private Sub setisolated(ByVal Key As String, ByVal value As Object)
            Dim isolatedStore As IsolatedStorageSettings
            If General_charge Then
                Try
                    ' Get the settings for this application.
                    isolatedStore = IsolatedStorageSettings.ApplicationSettings
                Catch e1 As Exception
                    Debug.WriteLine("Exception while using IsolatedStorageSettings: " & e1.ToString())
                End Try
                isolatedStore(Key) = value
                isolatedStore.Save()
            End If
    
        End Sub

    Les try catch sont pas bien placés, mais j'ai eu aucun plantage la dessus.
    Les seuls messages d'erreurs que j'ai, c'est sur des keynotfound alors qu'elles sont forcement créées lorsqu'on lance l'appli.

    Ca fait un moment que j'y réfléchis et je vois pas de problème dans mon code.

    mardi 30 octobre 2012 15:30
  • Ton code semble correct.

    Dans quels events effectue-tu ces appels ?

    Lorsque tu déploie ton application, effectue tu un rebuild (ou clean solution) avant le deploy ? Car ces méthodes réinitialise le contenu de l'isolated storage (désinstallation / réinstallation).


    Pour que la discussion puisse être identifiée comme résolue merci de marquer les réponses qui vous ont aidées à solutionner votre problème comme "réponse".


    mardi 30 octobre 2012 15:39
  • La première partie du code est appelé dans le constructeur de ma main page. j'ai tout mis dans une sub init_appli

    Pour les modifications, c'est dans deux pages dédiées qui sont appelées via différentes event en fonction des controls utilisés : listpicker, radiobutton, checkbox.

    Ca m'arrive de faire des rebuild, mais cela n'explique pas le problème. si j'avais fait un rebuild sur mon phone et déployé l'app, mes tiles ne se seraient plus mis à jour.
    Par contre, j'ai un doute du coup : si j'ai fait un rebuild de mon app et publier sur la market l'app, c'est bien une MAJ qui est faite non? et pas comme si j'avais rebuild sur mon phone : fresh installation

    mardi 30 octobre 2012 18:44
  • Oui oui c'est bien un rebuild.

    Mais attention, même si tu ne fais que lire dans ton agent, y'a un problème d'accès concurrent inter process car ton agent va qd même  essayer de faire un Save (c'est ainsi que fonctionne ApplicationSettings, t'as pas le choix)


    S'il vous plaît n'oublier pas de marquer la ou les réponses qui aident à résoudre votre problème. Pour que la discussion puisse être marquée comme résolue

    mercredi 31 octobre 2012 13:13
    Modérateur
  • hmm.

    Bon, va falloir que je mette en place le truc mutex alors. A suivre pour une prochaine version.

    mercredi 31 octobre 2012 14:38
  • J viens de relire le lien posté et l'exemple de code avec mutex.

    Rudy, est ce que ca veut dire que tu utilise un fichier XML stocker dans l'iso pour gérer tes paramètres?

    jeudi 1 novembre 2012 09:51