我有一个使用 SQLite 数据库的 WP7 应用程序。该应用程序的一个功能是备份到 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 语句,甚至只是一个循环检查文件的状态直到它关闭,或者什么。