猿问

C#Xamarin SQLite.Net序列化模式无法正常工作?

我在Android和iOS中使用库SQLite.Net-PCL,刚刚遇到错误。也许我误解了一些东西,但是SQLite文档指出:

序列化。在序列化模式下,SQLite可以不受限制地被多个线程安全使用。

但是,当我在多个线程上共享连接时,似乎出了点问题。

我写了一个测试应用程序。见下文。

通过“同时”插入,我得到了SQLite.Net.SQLiteException:Misuse

这是完整的例外:

SQLite.Net.SQLiteException:SQLite.Net.PreparedSqlLiteInsertCommand.ExecuteNonQuery(System.Object []源)[0x0016b]在<8f2bb39aeff94a30a8628064be9c7efe>:0处的滥用在SQLite.Net.SQLiteConnection.Insert(System.Object obj,System.String ,System.Type objType)在SQLite.Net.SQLiteConnection.Insert(System.Object obj)在<8f2bb39aeff94a30a8628064be9c7efe>:0中的[0x000fc] [0x00012]在test.b.DisplayClass(System.System.0)上在<8f2bb39aeff94a30a8628064be9c7efe> = 0时。 /Users/dev/Documents/Xamarin/TestRepo/test/TestTask.cs:49中的对象aName)[0x00052]

如果您随后查看数据库,它甚至看起来好像有重复的记录。

所以我的问题是:串行化模式是否不设计为在多个线程中使用单个连接?还是SQLite库中的错误?

用法(iOS示例):


    void HandleOnMessage(string msg)

    {

        UIApplication.SharedApplication.InvokeOnMainThread(() => Console.WriteLine(msg));

    }


    void DoIt()

    {

        var platform = new SQLite.Net.Platform.XamarinIOS.SQLitePlatformIOS();

        platform.SQLiteApi.Config(ConfigOption.Serialized);


        var path = Environment.GetFolderPath(Environment.SpecialFolder.Personal);

        path = Path.Combine(path, "test.db");


        TestTask.Init(platform, path, HandleOnMessage);

        TestTask.Run();

    }

附加信息:

  • 我在Android Simulator和Android Device中遇到相同的问题

  • 我正在使用Visual Studio for Mac 7.4.3(Build 10)

  • 我正在使用iOS 11.3的iPhoneX模拟器上进行调试


慕侠2389804
浏览 208回答 1
1回答
随时随地看视频慕课网APP
我要回答