2

Windows Phone 8 アプリケーションを作成しています。このアプリケーションの一部では、状態を保存する必要があります。Jsonの文字列として保存しています。アプリケーションを開いてデータを保存し、アプリケーションを終了して再度ロードすると、GetFolderAsync または OpenStreamForReadAsync でハングします。毎回発生するわけではありませんが、ハングし始めると、エミュレーター全体を強制終了し、新しいエミュレーターを作成してアプリケーションを再度起動する必要があります。

データのない空のファイルを作成しようとしても、問題は解決しません。

以下は、データの保存と読み込みに使用しているコードです。アプリケーションの開始時であろうとフォームのロードであろうと、どこでデータロードを呼び出すかは問題ではありません。

    private async Task SaveLists()
    {
        //XmlSerializer serializer = new XmlSerializer(typeof(ListHolder));

        // Get the local folder.
        StorageFolder local = Windows.Storage.ApplicationData.Current.LocalFolder;

        // Create a new folder name DataFolder.
        var dataFolder = await local.CreateFolderAsync("DataFolder",
            CreationCollisionOption.OpenIfExists);

        // Create a new file named DataFile.txt.
        var file = await dataFolder.CreateFileAsync("Lists.json",
        CreationCollisionOption.ReplaceExisting);

        string json = JsonConvert.SerializeObject(Lists, Formatting.Indented);
        byte[] fileBytes = System.Text.Encoding.UTF8.GetBytes(json.ToCharArray());

        using (var s = await file.OpenStreamForWriteAsync())
        {
            s.Write(fileBytes, 0, fileBytes.Length);

        }
    }



    private async Task LoadLists()
    {


        // Get the local folder.
        StorageFolder local = Windows.Storage.ApplicationData.Current.LocalFolder;

        if (local != null)
        {
            try
            {
                // Get the DataFolder folder.

                var dataFolder = await local.GetFolderAsync("DataFolder");

                // Get the file.
                var files = dataFolder.GetFilesAsync();
                var file = await dataFolder.OpenStreamForReadAsync("Lists.json");

                string jsonString = "";
                // Read the data.
                using (StreamReader streamReader = new StreamReader(file))
                {
                    jsonString = streamReader.ReadToEnd();
                }
                if (jsonString.Length > 0)
                {
                    Lists = JsonConvert.DeserializeObject<List<ItemList>>(jsonString);
                }    
                else
                {
                    Lists = new List<ItemList>();
                }                
            }
            catch (Exception ex)
            {
                Lists = new List<ItemList>();
            }

        }
    }
4

1 に答える 1