0

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

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

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

我已经剥离了代码,希望让它更容易阅读。

UI Binding Collection 字段在代码后面。

    ObservableCollection<string> Subjects;

Click 事件调用 write 方法。

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

将文件添加到 IsoStore 和主题集合的方法。返回用于条件 UI 操作的布尔值。

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

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

4

1 回答 1

1

IsolatedStorageFileStreamOpenFile. 您需要在其他操作可以操作它之前处理它。

顺便说一句,using 语句会为您调用 dispose,因此无需在using语句末尾调用 dispose。

于 2013-03-30T16:12:34.997 回答