我有以下代码,我在创建应用时经常使用Android和iOS。简单地说,它在插入,创建或更新表时会创建一个锁。
public class SQL
{
readonly object dbLock = new object();
const string DBClauseSyncOff = "PRAGMA SYNCHRONOUS=OFF;";
const string DBClauseVacuum = "VACUUM;";
#region Setup
public bool SetupDB()
{
lock (dbLock)
只要WinPhone 8.1应用程序遇到此锁定行,就会抛出异常。由于这是Xam.Forms应用程序的一部分,我使用以下
将其称为存在 public App()
{
App.Self = this;
var netLanguage = DependencyService.Get<ILocalise>().GetCurrent();
LangResources.Culture = new CultureInfo(netLanguage);
ConnectionString = DependencyService.Get<ISQLite>().GetConnectionString();
App.Self.SQLitePlatform = DependencyService.Get<ISQLite>().GetPlatform();
DBManager = new SQL();
DBManager.SetupDB();
没有任何东西与两个依赖服务异步调用,因为它们的名称表明正在使用的连接和平台。
电话看起来像这样
public string GetConnectionString()
{
var documents = ApplicationData.Current.LocalFolder.Path;
var pConnectionString = System.IO.Path.Combine(documents, "preferences.db");
var connectionString = string.Format("{0}; New=true; Version=3;PRAGMA locking_mode=NORMAL; PRAGMA journal_mode=WAL; PRAGMA cache_size=20000; PRAGMA page_size=32768; PRAGMA synchronous=off", pConnectionString);
return connectionString;
}
public ISQLitePlatform GetPlatform()
{
return new SQLite.Net.Platform.WinRT.SQLitePlatformWinRT();
}
如果我注释掉SetupDB系列,应用程序会按照我的预期运行。如果保留,则应用程序崩溃并显示无法创建初始显示的错误。
为了让数据库代码能够在所有平台上运行而不仅仅是Android和iOS,我需要做些什么(或不做)?