Windows phone 8 Windows Phone ScheduledTask中的IsolatedStorage编辑

Windows phone 8 Windows Phone ScheduledTask中的IsolatedStorage编辑,windows-phone-8,scheduled-tasks,mutex,isolatedstorage,background-task,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.GetP

我正在从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)
        {
        }

    }
private void StartToastTask(ScheduledTask任务)
{
长秩=0,差=0;
字符串文本=”,昵称=”;
PishtiWCF.PishtiWCFServiceClient ws=ServiceClass.GetPishtiWCFSvc();
ws.GetUsersRankCompleted+=(src,e)=>
{
尝试
{
如果(e.Error==null)
{
差异=等级-e.Result.GeneralRank;
如果(!String.IsNullOrEmpty(昵称))
{
如果(差异<0)
text=string.Format(“{0},{1}kişi seni geçti!”,昵称,difference.ToString(),e.Result.GeneralRank);
否则,如果(差异>0)
text=string.Format(“{0},{1}kişiyi daha geçtin!”,昵称,Math.Abs(difference.ToString(),e.Result.GeneralRank);
否则如果(e.Result.GeneralRank!=1)
text=string.Format(“{0},sıralamadaki yerin değişmedi!”,昵称,e.Result.GeneralRank);
其他的
text=string.Format(“{0},en büyük sensin,böyle devam!”,昵称);
}
其他的
返回;
互斥mut;
如果(!Mutex.TryOpenExisting(“IsoStorageMutex”,out mut))
mut=新的互斥体(false,“IsoStorageMutex”);
mut.WaitOne();
使用(IsolatedStorageFile=IsolatedStorageFile.GetUserStoreForApplication())
{
使用(IsolatedStorageFileStream=file.OpenFile(“UserRanks”,FileMode.Open,FileAccess.Write))
{
StreamWriter writer=新StreamWriter(流);
Write(string.Format(“{0},{1}”,昵称,e.Result.GeneralRank));
writer.Close();
stream.Close();
}
}
mut.ReleaseMutex();
ShellToast toast=新的ShellToast();
toast.Title=“Pishti”;
toast.Content=文本;
toast.Show();
}
完成任务(task);
}
捕获(例外)
{
}
};
尝试
{
互斥mut;
如果(!Mutex.TryOpenExisting(“IsoStorageMutex”,out mut))
mut=新的互斥体(false,“IsoStorageMutex”);
mut.WaitOne();
使用(IsolatedStorageFile=IsolatedStorageFile.GetUserStoreForApplication())
{
使用(IsolatedStorageFileStream=file.OpenFile(“UserRanks”,FileMode.Open,FileAccess.Read))
{
使用(StreamReader=新StreamReader(stream))
{
string temp=reader.ReadToEnd();
如果(临时拆分(',').Count()>1)
{
昵称=临时拆分(',')[0];
rank=long.Parse(临时拆分(',')[1]);
ws.GetUsersRankAsync(昵称);
}
reader.Close();
}
stream.Close();
}
}
mut.ReleaseMutex();
}
捕获(例外)
{
}
}
我从UserRanks文件中获取rank,例如1200,但当我从WCF获取和数据时,将其编辑为1000,并希望将其写入IsolatedStorage,它不会使应用程序崩溃,但会失败

你知道为什么吗


谢谢。

我用删除文件修复了它

                    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();

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

您应该使用FileMode.OpenOrCreate(不言自明)或FileMode.Append(如果文件存在并查找到文件末尾),或者创建一个新文件(如果不存在)


如果你想扔掉任何预先存在的文件(删除后再创建即可),那么只需使用FileMode。创建

你的捕获块为空是有原因的吗?我看到你解决了你的问题,但你说它没有崩溃,但失败了。如果catch块为空,则表示从何处开始故障排除的异常将被吞噬。将
catch(Exception)
更改为
catch(Exception ex)
并将断点放低一行是一个好的开始。这样,即使您计划忽略异常,当调试期间发生异常时,应用程序也会停止并允许您检查异常。