Я создал приложение, которое изначально создает базу данных и сохраняет в ней некоторые данные. Теперь я хочу удалить эту базу данных и ее файлы, когда пользователь нажимает кнопку сброса, но я получаю сообщение об ошибке - «это использование в другом процессе». Я хочу, чтобы он удалял и воссоздавал базу данных при нажатии кнопки сброса. Есть идеи?Сброс настроек приложения в wp7
ответ
Наиболее частой причиной этого является ude для резьбы небезопасный характер взаимодействия с изолированным хранилищем на Windows Phone. Независимо от того, как вы реализуете базу данных (будь то в файле или серии файлов), вы взаимодействуете с изолированным хранилищем на каком-то уровне.
Я настоятельно рекомендую вам прочитать и убедитесь, что вы понимаете this overview of isolated storage, прежде чем заходить слишком далеко.
Ты замечание:
Это используется в другом процессе
заставляет меня думать, что вы используете библиотеку третьей стороны, чтобы сделать ваши вещи базы данных. Это исключение/ошибка возникает, когда сама библиотека не может получить доступ к изолированному хранилищу. Не зная точно, как вы реализуете базу данных, трудно точно говорить о вашей ситуации.
Вы никогда не «воссоздаете Изолированное хранилище», изолированное хранилище - это термин, используемый для определения коллекции дискового пространства, к которой имеет доступ ваше приложение. Подобно папке, это дисковое пространство имеет корень и содержит только файлы, которые вы создаете.
Для того, чтобы избежать исключения потоков при доступе к изолированному хранилищу, убедитесь, что вы используете using ключевое слово в C#, как так:
namespace IsolatedStorageExample
{
public class ISOAccess
{
// This example method will read a file inside your Isolated Storage.
public static String ReadFile(string filename)
{
string fileContents = "";
// Ideally, you should enclose this entire next section in a try/catch block since
// if there is anything wrong with below, it will crash your app.
//
// This line returns the "handle" to your Isolated Storage. The phone considers the
// entire isolated storage folder as a single "file", which is why it can be a
// little bit of a confusing name.
using(IsolatedStorageFile file = IsolatedStorageFile.GetUserStoreForAppliaction())
{
// If the file does not exist, return an empty string
if(file.Exists(filename))
{
// Obtain a stream to the file
using(IsolatedStorageFileStream stream = File.OpenFile(filename, FileMode.Open)
{
// Open a stream reader to actually read the file.
using(StreamReader reader = new StreamReader(stream))
{
fileContents = reader.ReadToEnd();
}
}
}
}
return fileContents;
}
}
}
Это должно помочь с вашей проблемой безопасности потока. Чтобы быть более конкретно полезно к тому, что вы хотите сделать, посмотрите на следующие методы (Вы можете добавить это в класс выше):
// BE VERY CAREFUL, running this method will delete *all* the files in isolated storage... ALL OF THEM
public static void ClearAllIsolatedStorage()
{
// get the handle to isolated storage
using(IsolatedStorageFile file = IsolatedStorageFile.GetUserStoreForApplication())
{
// Get a list of all the folders in the root directory
Queue<String> rootFolders = new Queue<String>(file.GetDirectoryNames());
// For each folder...
while(0 != rootFolders.Count)
{
string folderName = rootFolders.Dequeue();
// First, recursively delete all the files and folders inside the given folder.
// This is required, because you cannot delete a non-empty directory
DeleteFilesInFolderRecursively(file, folderName);
// Now that all of it's contents have been deleted, you can delete the directory
// itsself.
file.DeleteDirectory(rootFolders.Dequeue());
}
// And now we delete all the files in the root directory
Queue<String> rootFiles = new Queue<String>(file.GetFileNames());
while(0 != rootFiles.Count)
file.DeleteFile(rootFiles.Dequeue());
}
}
private static void DeleteFilesInFolderRecursively(IsolatedStorageFile iso, string directory)
{
// get the folders that are inside this folder
Queue<string> enclosedDirectories = new Queue<string>(iso.GetDirectoryNames(directory));
// loop through all the folders inside this folder, and recurse on all of them
while(0 != enclosedDirectories.Count)
{
string nextFolderPath = Path.Combine(directory, enclosedDirectories.Dequeue());
DeleteFilesInFolderRecursively(nextFolderPath);
}
// This string will allow you to see all the files in this folder.
string fileSearch = Path.Combine(directory, "*");
// Getting the files in this folder
Queue<string> filesInDirectory = iso.GetFileNames(fileSearch);
// Finally, deleting all the files in this folder
while(0 != filesInDirectory.Count)
{
iso.DeleteFile(filesInDirectory.Dequeue());
}
}
Еще одна вещь, я настоятельно рекомендую реализует класс, который обращается к IsolatedStorage с помощью a «Многопоточный шаблон с одним синглом», как описано here.
Надеюсь, что это полезно. Код предоставляется «как есть», я его не компилировал, но общие понятия есть все, поэтому, если что-то не так, прочитайте документы MSDN, чтобы узнать, где я сработал. Но я заверяю вас, что большинство из них скопировано из моего функционального кода, поэтому он должен работать с очень маленьким фанагированием.
- 1. Android 2.3 Сброс настроек приложения
- 2. Страница настроек приложения WP7 в настройках приложения ОС?
- 3. Сброс настроек [PHPhotoLibrary authorizationStatus]
- 4. Сброс настроек Настройки
- 5. Сброс настроек главной страницы
- 6. UITableView: Сброс настроек ячейки
- 7. Сброс настроек пользователя C#
- 8. Сброс настроек завода ADB?
- 9. Сброс настроек в установках SystemVerilog
- 10. Сброс общих настроек при переустановке
- 11. Сброс настроек NSToolbar по умолчанию
- 12. Как предотвратить сброс настроек Android?
- 13. Необходим сброс настроек (или альтернативный)
- 14. Сброс настроек панели инструментов infragistics
- 15. Как выполнить сброс настроек с помощью АБР или приложения
- 16. Центрирование приложения в WP7
- 17. pip.main() сброс настроек ведения журнала в python
- 18. Сброс настроек флажка в браузерах назад кнопка
- 19. Сброс настроек контроллера контроллера панели табуляции
- 20. Сброс пользовательских настроек визуальной веб-части Sharepoint
- 21. Сброс настроек рефакторинга IntelliJ по умолчанию
- 22. Сброс настроек цвета динамически созданных кнопок Android
- 23. Сброс настроек тестирования Visual Studio кеш и
- 24. Сброс настроек режима Immersive при изменении активности
- 25. jQuery Сброс настроек радиоприемника при нажатии кнопки
- 26. Как предотвратить сброс настроек после поворота устройства?
- 27. Запуск приложения WP7 Map
- 28. Локализация уровня приложения в wp7
- 29. Facebook приложения и WP7
- 30. Корпоративные приложения для WP7?
Как удалить файл? Вы закрыли и уничтожили все экземпляры DbContext, указывающие на имя файла? –
Сколько данных вы сотреете? возможно, ApplicationSettings достаточно хорош. –
Восстановить базу данных IsolatedStorage и удалить файлы изображений и аудиофайлы –