创建数据库锁时Windows Phone 8.1崩溃

时间:2016-08-07 02:20:21

标签: sqlite windows-phone-8.1 xamarin.forms

我有以下代码,我在创建应用时经常使用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,我需要做些什么(或不做)?

0 个答案:

没有答案