将事件通知移动到另一个线程

时间:2009-11-12 06:17:48

标签: c# multithreading events

我正在使用提供数据库访问权限的第三方库。在数据库连接对象中,有一个名为Updated的事件,每当修改数据库时都会触发该事件。

当我的委托想要从数据库中读取时,我遇到了麻烦。看起来连接有ReaderWriterLock保护数据库。在ExecuteNonQuery调用期间,将执行写入程序锁定,但在事件触发之前不会释放。所以,如果我想阅读,我的代表就陷入僵局。

我开始编写一个单独的线程,它将从数据库连接中获取事件并将其传递给已注册的代理,但这感觉就像一个草率的解决方案。我错过了处理这个问题的简单方法吗?

真正困扰我的是我并不总是遇到僵局。但是,当我点击它并查看调用堆栈时,它会一直回到我发布更新的位置。

顺便说一下,我使用的库是System.Data.SQLite

1 个答案:

答案 0 :(得分:1)

在Updated事件中,调用ThreadPool.QueueUserWorkItem()并使用当前Updated事件回调中的逻辑传递一个方法。