Windows Phone ScheduledTask中的IsolatedStorage编辑

时间:2014-11-05 13:27:30

标签: windows-phone-8 scheduled-tasks mutex isolatedstorage background-task

我正在从IsolatedStorage读取数据,但无法在ScheduledTask中编辑它。我该如何编辑?

private void StartToastTask(ScheduledTask task)
    {
        long rank = 0, difference = 0;
        string text = "", nickname = "";
        PishtiWCF.PishtiWCFServiceClient ws = ServiceClass.GetPishtiWCFSvc();
        ws.GetUsersRankCompleted += (src, e) =>
        {
            try
            {
                if (e.Error == null)
                {
                    difference = rank - e.Result.GeneralRank;
                    if (!String.IsNullOrEmpty(nickname))
                    {
                        if (difference < 0)
                            text = string.Format("{0}, {1} kişi seni geçti!", nickname, difference.ToString(), e.Result.GeneralRank);
                        else if (difference > 0)
                            text = string.Format("{0}, {1} kişiyi daha geçtin!", nickname, Math.Abs(difference).ToString(), e.Result.GeneralRank);
                        else if (e.Result.GeneralRank != 1)
                            text = string.Format("{0}, sıralamadaki yerin değişmedi!", nickname, e.Result.GeneralRank);
                        else
                            text = string.Format("{0}, en büyük sensin, böyle devam!", nickname);
                    }
                    else
                        return;
                    Mutex mut;
                    if (!Mutex.TryOpenExisting("IsoStorageMutex", out mut))
                        mut = new Mutex(false, "IsoStorageMutex");
                    mut.WaitOne();
                    using (IsolatedStorageFile file = IsolatedStorageFile.GetUserStoreForApplication())
                    {
                        using (IsolatedStorageFileStream stream = file.OpenFile("UserRanks", FileMode.Open, FileAccess.Write))
                        {
                            StreamWriter writer = new StreamWriter(stream);
                            writer.Write(string.Format("{0},{1}", nickname, e.Result.GeneralRank));
                            writer.Close();
                            stream.Close();
                        }
                    }
                    mut.ReleaseMutex();

                    ShellToast toast = new ShellToast();
                    toast.Title = "Pishti";
                    toast.Content = text;
                    toast.Show();
                }
                FinishTask(task);
            }
            catch (Exception)
            {

            }
        };
        try
        {
            Mutex mut;
            if (!Mutex.TryOpenExisting("IsoStorageMutex", out mut))
                mut = new Mutex(false, "IsoStorageMutex");
            mut.WaitOne();
            using (IsolatedStorageFile file = IsolatedStorageFile.GetUserStoreForApplication())
            {
                using (IsolatedStorageFileStream stream = file.OpenFile("UserRanks", FileMode.Open, FileAccess.Read))
                {
                    using (StreamReader reader = new StreamReader(stream))
                    {
                        string temp = reader.ReadToEnd();
                        if (temp.Split(',').Count() > 1)
                        {
                            nickname = temp.Split(',')[0];
                            rank = long.Parse(temp.Split(',')[1]);
                            ws.GetUsersRankAsync(nickname);
                        }
                        reader.Close();
                    }
                    stream.Close();
                }
            }
            mut.ReleaseMutex();
        }
        catch (Exception)
        {
        }

    }

我从UserRanks文件获得排名,例如1200,但是当我从WCF获取数据时,将其编辑为1000并想要将其写入IsolatedStorage,它不会使应用程序崩溃但它会失败。

你知道为什么吗?

感谢。

2 个答案:

答案 0 :(得分:1)

我用删除文件修复了它。

                    Mutex mut;
                    if (!Mutex.TryOpenExisting("IsoStorageMutex", out mut))
                        mut = new Mutex(false, "IsoStorageMutex");
                    mut.WaitOne();
                    using (IsolatedStorageFile file = IsolatedStorageFile.GetUserStoreForApplication())
                    {
                        if (file.FileExists("UserRanks"))
                            file.DeleteFile("UserRanks");
                        using (IsolatedStorageFileStream stream = file.OpenFile("UserRanks", FileMode.OpenOrCreate, FileAccess.Write))
                        {
                            StreamWriter writer = new StreamWriter(stream);
                            writer.Write(string.Format("{0},{1}", nickname, e.Result.GeneralRank));
                            writer.Close();
                            stream.Close();
                        }

                    }
                    mut.ReleaseMutex();

答案 1 :(得分:0)

您似乎首先写入文件,这是有道理的,但是当您这样做时,您使用文件访问模式 - FileMode.Open - 这意味着“打开现有文件”。第一次执行此操作时,文件将不存在,打开将失败。

你应该使用FileMode.OpenOrCreate,这是自我解释的,或者FileMode.Append将打开文件(如果它存在)并寻找到文件的末尾,或者创建一个新文件(如果不存在)。

如果你想丢弃任何预先存在的文件(这是你的删除然后创建的文件),那么只需使用FileMode.Create