user2388000
user2388000

Reputation: 11

IsolatedStorageException Operation Not Permitted when calling CreateFile Repeatedly

I've read about a thousand similar posts, and have followed the general advice but am still running into the issue. Here's my scenario:

I'm working on a Windows Phone 8 app that, when the user saves, serializes all of their data into XML then uses CreateFile to store it. The problem that I'm facing is that if a user hits save several times consecutively, IsolatedStorageException:Operation Not Permitted is thrown (I'm guessing that the serialization takes long enough that the file is still being used when I attempt to access it a second time). When save is tapped the second time, is there a way for me to abort the previous action, free up the isolated storage file, and initiate the new save? Or is there a better solution?

Here's the code for my Save method (the exception occurs on the isoStore.CreateFile(filename) line):

        using (IsolatedStorageFile isoStore = IsolatedStorageFile.GetUserStoreForApplication())
        {

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

Any help would be amazing, as I've been stuck here for weeks.

Thanks, Ben:

Upvotes: 1

Views: 313

Answers (2)

vonLochow
vonLochow

Reputation: 448

You could go with something like this.

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

Upvotes: 2

Alaa Masoud
Alaa Masoud

Reputation: 7135

Why not disable the 'save' button when clicked then enable it again once the serialization completes?

Upvotes: 1

Related Questions