在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);
}
}
代码很直接,我只是不知道我错过了什么。 :(
答案 0 :(得分:1)
您从OpenFile
获得IsolatedStorageFileStream
。你需要在另一个操作可以操作它之前处置它。
顺便说一下,using语句为你调用dispose,所以不需要在using
语句的末尾调用dispose。