重复调用CreateFile时不允许IsolatedStorageException操作

本文关键字:不允许 IsolatedStorageException 操作 CreateFile 调用 | 更新日期: 2023-09-27 18:13:53

我已经读了大约一千篇类似的文章,并遵循了一般的建议,但我仍然遇到这个问题。下面是我的场景:

我正在开发一个Windows Phone 8应用程序,当用户保存时,将所有数据序列化为XML,然后使用CreateFile来存储它。我面临的问题是,如果用户连续点击保存几次,就会抛出IsolatedStorageException:Operation Not allowed(我猜测序列化花费的时间足够长,当我第二次尝试访问该文件时,该文件仍在使用)。当第二次点击保存时,我是否有办法中止之前的操作,释放隔离的存储文件,并启动新的保存?还是有更好的解决方案?

下面是我的Save方法的代码(异常发生在isoStore.CreateFile(filename)行):

        using (IsolatedStorageFile isoStore = IsolatedStorageFile.GetUserStoreForApplication())
        {
            using (IsolatedStorageFileStream stream = isoStore.CreateFile(filename))
            {
                XmlSerializer xml = new XmlSerializer(GetType());
                xml.Serialize(stream, this);
            }
        }

任何帮助都太棒了,因为我已经被困在这里好几个星期了。

谢谢,本:

重复调用CreateFile时不允许IsolatedStorageException操作

你可以这样做。

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;
}

为什么不在单击'save'按钮时禁用它,然后在序列化完成后再次启用它呢?