2

何らかの理由で、(ブラウザーで) Silverlight アプリケーションを再起動するたびに、分離ストレージにキーがありません。

以下のコードを使用して、バニラのテンプレートでこれを試してみました。私がチェックしたこと:

  1. 常に同じポートを使用する

  2. 起動時に、アプリケーションは常に分離ストレージにエントリを作成しました (永続化されません)。

  3. シャットダウン時に、キーは常に分離ストレージに存在します

コード:-

 namespace SilverlightApplication1  
 {

    public partial class MainPage : UserControl, INotifyPropertyChanged
    {

        private string _ChildCount;
        public string ChildCount
        {
            get { return _ChildCount; }
            set { NotifyPropertyChangedHelper.SetProperty(this, ref _ChildCount, value, "ChildCount", PropertyChanged); }
        }


        public MainPage()
        {
            InitializeComponent();
            SaveData();

        }

        ~MainPage()
        {
            CheckData();
        }

        private void SaveData()
        {
            if (!IsolatedStorageSettings.ApplicationSettings.Contains("childCheck"))
            {
                IsolatedStorageSettings.ApplicationSettings.Add("childCheck", Parent.Create(5, 5));
                ChildCount = "Created Children(5)";
            }
            else
                CheckData();
        }

        private void CheckData()
        {
            if (IsolatedStorageSettings.ApplicationSettings.Contains("childCheck"))
            {
                if (((Parent)IsolatedStorageSettings.ApplicationSettings["childCheck"]).Children.Length == 5)
                    ChildCount = "Children Present";
                else
                    ChildCount = "Parent present without children";
            }
            else
                ChildCount = "Children not found";
        }



        public class Parent
        {
            public int Id { get; private set; }
            public Child[] Children { get; private set; }
            private Parent() { }

            public static Parent Create(int id, int childCount)
            {
                var result = new Parent
                {
                    Id = id,
                    Children = new Child[childCount]
                };

                for (int i = 0; i < result.Children.Length; i++)
                    result.Children[i] = Child.Create(i);

                return result;
            }

        }

        public class Child
        {
            public int Id { get; private set; }
            private Child() { }

            public static Child Create(int id)
            {
                return new Child { Id = id };
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;
    }
}

どんな助けでも大歓迎です。

4

1 に答える 1

2

オブジェクトをアプリケーション設定にシリアル化するには、関連する各タイプ (この場合はParentとの両方Child) にパブリックのデフォルト コンストラクターが必要であり、シリアル化が必要なプロパティにはパブリックの getter および setter プロシージャが必要です。

. _ System.Runtime.Serialization_DataMember

さらに、あなたは電話を受けていないIsolatedStorageSettings.ApplicationSettings.Saveので、とにかく店には何もありません。

于 2010-08-12T16:50:24.133 に答える