我们在Windows Phone 8上的mvvmcross应用程序中使用Community.MvvmCross-SQLite项目时遇到一些问题。我们有几个后台线程(使用Task.Run())读取/写入数据库响应服务器的更新 - 由于更新可能需要几秒钟,因此我们不希望用户界面冻结。
在运行应用程序时,我们会遇到一些崩溃,我们会看到消息,例如"数据库丢失或损坏",在调试情况时,我们会看到从后台线程访问数据库时崩溃。
我们尝试在整个项目中使用一个常见的SqliteConnection,每次我们尝试写入数据库时,我们都会将调用封装在lock()语句中。
答案 0 :(得分:0)
SQLite和多线程
SQLite支持三种不同的线程模式:
1.单螺纹。在此模式下,所有互斥锁都被禁用,并且SQLite一次不能在多个线程中使用。
2.多线程。在这种模式下,只要在两个或多个线程中不同时使用单个数据库连接,SQLite就可以被多个线程安全地使用。
3.Serialized。在序列化模式下,SQLite可以被多个线程安全地使用而没有任何限制。