SQLite.net多线程

3
我想在我的WPF应用程序中以多线程模式使用SQLite。我是C#的初学者,已经阅读了很多关于SQLite和多线程的帖子,但是......无法实现我想要的...

我创建了一个后台工作器,解析不同的文件,然后将每个文件的结果插入到一个数据库中。

我正在使用SQLite.net PCL

除非有人问我,否则我不会发布所有代码,但为了进行一些测试,我会做类似这样的事情:

lock (_lock)
{
   using (var test = new SQLiteConnection(new SQLitePlatformWin32(), "test.s3db"))
   {
       test.Insert(new MyClassWhichHaveAllField(){Title="XXX"});
   }
}

_lock被定义为:

public static object _lock = new object();

在我的BackgroundWorker实现中,我使用了静态成员。

即使我加了锁,我仍然收到异常消息"SQLite.Net.SQLiteException: Could not open database file: recipes.s3db (Misuse)"

我尝试添加一些SQLiteOpenFlags:

SQLiteOpenFlags.FullMutex

它并没有改变任何事情。 非常感谢你……
2个回答

0
我回答我的问题,因为实际上,我已经实现的代码很好,除了我写的这段代码:
static object _lock = new object();

所以它被定义为私有的...

谢谢你。


0

我会尝试使用它,但是如何确保我的 BackgroundWorker 完成后,所有元素都已经插入到 SQL 数据库中呢? - Muby
并且能否解释一下为什么我实施的方法不起作用呢? - Muby
每次锁定连接时都会创建一个新的连接(这非常慢/糟糕),但您无法控制何时关闭(销毁)该连接。因此,第二次访问数据库时,由于垃圾回收尚未关闭它,数据库仍将保持打开状态... - AnthonyLambert
看一下异步扩展。 - AnthonyLambert

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接