У меня есть приложение WP7, которое использует базу данных SQLite. Особенностью приложения является резервное копирование в SkyDrive, которое отлично работает, но после этого мое приложение выдает «невозможно открыть файл базы данных». Если я немного подожду (где-то от 10 до 60 секунд), он снова начнет работать. Я не знаю, связана ли проблема с Live SDK, IsolatedStorage или чем-то еще, но мне кажется, что проблема в том, что файл все еще используется после завершения загрузки. (Что бы это ни стоило, я не считаю, что это строго ошибка SQLite.)
Я использую следующий код (отредактированный для краткости):
private void Upload() {
this._LiveClient.UploadProgressChanged += UploadProgressChanged;
this._LiveClient.UploadCompleted += UploadCompleted;
IsolatedStorageFileStream stream = null;
try {
using( IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication() ) {
stream = store.OpenFile( "mydatabasefile.dat", FileMode.Open, FileAccess.Read );
}
this._LiveClient.UploadAsync( "DestinationPath", "DestinationFilename.sqlite", true, stream, null );
} catch( Exception e ) {
MessageBox.Show( e.Message, "Error", MessageBoxButton.OK );
}
}
private void UploadCompleted( object sender, LiveOperationCompletedEventArgs e ) {
if( e.Error == null ) {
MessageBox.Show( "File successfully uploaded.", "Backup", MessageBoxButton.OK );
if( this.NavigationService.CanGoBack ) this.NavigationService.GoBack();
} else {
MessageBox.Show( e.Error.Message, "Upload Error", MessageBoxButton.OK );
}
}
После перехода назад (который всегда будет моей главной страницей) все, что я пытаюсь сделать, требующее доступа к базе данных (например, переход на мою страницу просмотра и отображение записи), выдает ошибку (опять же, пока я немного не подожду).
Я не уверен, нужен ли мне где-то оператор Close или даже просто цикл, проверяющий состояние файла, пока он не будет закрыт, или что-то в этом роде.