我正在使用提供数据库访问权限的第三方库。在数据库连接对象中,有一个名为Updated
的事件,每当修改数据库时都会触发该事件。
当我的委托想要从数据库中读取时,我遇到了麻烦。看起来连接有ReaderWriterLock
保护数据库。在ExecuteNonQuery
调用期间,将执行写入程序锁定,但在事件触发之前不会释放。所以,如果我想阅读,我的代表就陷入僵局。
我开始编写一个单独的线程,它将从数据库连接中获取事件并将其传递给已注册的代理,但这感觉就像一个草率的解决方案。我错过了处理这个问题的简单方法吗?
真正困扰我的是我并不总是遇到僵局。但是,当我点击它并查看调用堆栈时,它会一直回到我发布更新的位置。
顺便说一下,我使用的库是System.Data.SQLite。
答案 0 :(得分:1)
在Updated事件中,调用ThreadPool.QueueUserWorkItem()并使用当前Updated事件回调中的逻辑传递一个方法。