Windows Phone 计划任务中的独立存储编辑
Posted
技术标签:
【中文标题】Windows Phone 计划任务中的独立存储编辑【英文标题】:IsolatedStorage Edit in Windows Phone ScheduledTask 【发布时间】:2014-11-05 13:27:30 【问题描述】:我正在从 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,它不会使应用程序崩溃,但它会失败。
你知道为什么吗?
谢谢。
【问题讨论】:
你的 catch 块是空的吗?我看到你解决了你的问题,但你说它不会崩溃但会失败。如果 catch 块为空,则指示从何处开始故障排除的异常被吞下。一个好的起点是将catch (Exception)
更改为catch (Exception ex)
并在下一行放置一个断点。这样,即使您打算忽略异常,当在调试过程中发生异常时,应用程序也会停止并允许您检查它。
【参考方案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();
【讨论】:
【参考方案2】:您似乎首先写入文件,这是有道理的,但是当您这样做时,您会使用文件访问模式 - FileMode.Open - 这意味着“打开现有文件”。第一次执行此操作时,文件将不存在并且打开将失败。
您应该使用不言自明的 FileMode.OpenOrCreate,或者使用 FileMode.Append,如果文件存在则打开并查找文件末尾,如果不存在则创建一个新文件。
如果您想丢弃任何预先存在的文件(这是您的删除然后创建将执行的操作),那么只需使用 FileMode.Create
【讨论】:
以上是关于Windows Phone 计划任务中的独立存储编辑的主要内容,如果未能解决你的问题,请参考以下文章
将带有 Exif 信息的图像从 Windows Phone 发送到 Java 服务器
Windows 7 Phone 文档数据库Rapid Repository正式发布