我已经阅读了大约一千个类似的帖子,并且已经遵循了一般建议,但我仍然遇到了这个问题。这是我的情景:
我正在开发一个Windows Phone 8应用程序,当用户保存时,将其所有数据序列化为XML,然后使用CreateFile存储它。我面临的问题是,如果用户连续多次点击保存,则会抛出IsolatedStorageException:Operation Not Permitted(我猜测序列化需要足够长的时间才能在我尝试访问文件时使用该文件第二次)。第二次点击保存时,有没有办法让我中止上一个操作,释放隔离的存储文件,然后启动新的保存?或者有更好的解决方案吗?
这是我的Save方法的代码(异常发生在isoStore.CreateFile(filename)行上):
using (IsolatedStorageFile isoStore = IsolatedStorageFile.GetUserStoreForApplication())
{
using (IsolatedStorageFileStream stream = isoStore.CreateFile(filename))
{
XmlSerializer xml = new XmlSerializer(GetType());
xml.Serialize(stream, this);
}
}
任何帮助都会很棒,因为我已经被困在这里好几个星期了。
谢谢, 本:
答案 0 :(得分:2)
你可以选择这样的东西。
private async Task Save(string fileName)
{
Button.IsEnabled = false;
await Task.Run(() =>
{
using (IsolatedStorageFile isoStore = IsolatedStorageFile.GetUserStoreForApplication())
{
using (IsolatedStorageFileStream stream = isoStore.CreateFile(filename))
{
XmlSerializer xml = new XmlSerializer(GetType());
xml.Serialize(stream, this);
}
}
});
Button.IsEnabled = true;
}
答案 1 :(得分:1)
为什么不在单击时禁用“保存”按钮,然后在序列化完成后再次启用它?