DeleteFile在ContextMenu中抛出IsolatedStorageFileException

时间:2013-03-30 15:54:58

标签: c# windows-phone-7 isolatedstoragefile

在Silverlight for Windows Phone(XAML / C#)中编写WP7.1(Mango)应用程序。我有一个例外,我无法动摇。我有一个显示ObservableCollection<string>的ListBox,它显示来自IsolatedStorage的XML文件的文件名。 Listbox控件还包含Windows Phone Toolkit中的ContextMenu。我用它来从我的ListBox和磁盘中删除项目。

ContextMenu和我的删除方法正常工作......但如果在同一页面上没有导航,我创建一个新文件(让我们称之为File1)然后创建另一个文件(File2),如果我然后尝试删除File1,IsolateStorageFile.DeleteFile方法抛出一个异常,指出“访问IsolatedStorage时发生错误”,内部消息为null。但是,如果我创建File1,那么File2。然后删除File2然后删除File1,它工作正常!哎呀!

如果我离开页面或重新启动应用程序,我可以删除文件没有问题。

我已经删除了代码,希望能让它更容易阅读。

后面代码中的UI Binding Collection字段。

    ObservableCollection<string> Subjects;

单击事件调用write方法。

    private void Button_Click_AddNewSubject(object sender, RoutedEventArgs e)
    {
        if (TryWriteNewSubject(NewSubjectNameTextBox.Text))
        {
            ... Manipulate UI
        }
    }

将文件添加到IsoStore和Subjects集合的方法。返回条件UI操作的bool。

    private bool TryWriteNewSubject(string subjectName)
    {
            ... file name error checking 

                using (var store = IsolatedStorageFile.GetUserStoreForApplication())
                {
                    store.OpenFile(subjectName + ".xml", FileMode.CreateNew);
                    store.Dispose();
                }
                Subjects.Add(subjectName);
                return true;
            }
            else return false;
        }
        else return false;
    }

ContextMenu点击事件调用删除文件方法

    private void ContextMenuButton_Click(object sender, RoutedEventArgs e)
    {
        string subjectName = (sender as MenuItem).DataContext as string;
        DeleteFile(subjectName);
    }

我的删除方法

    private void DeleteFile(string subjectName)
    {
            using (var store = IsolatedStorageFile.GetUserStoreForApplication())
            {
                string fileName = subjectName + ".xml";
                store.DeleteFile(fileName);
                Subjects.Remove(subjectName);
            }
    }

代码很直接,我只是不知道我错过了什么。 :(

1 个答案:

答案 0 :(得分:1)

您从OpenFile获得IsolatedStorageFileStream。你需要在另一个操作可以操作它之前处置它。

顺便说一下,using语句为你调用dispose,所以不需要在using语句的末尾调用dispose。