代码之家  ›  专栏  ›  技术社区  ›  jheddings

将事件通知移动到其他线程

  •  1
  • jheddings  · 技术社区  · 15 年前

    我正在与提供对数据库访问的第三方库合作。在数据库连接对象中,有一个名为 Updated ,在修改数据库时激发。

    当我的代表想要从数据库中读取数据时,我遇到了一个障碍。看起来连接有一个 ReaderWriterLock 保护数据库。期间 ExecuteNonQuery 调用时,将获取编写器锁,但不会在事件激发之前释放。所以,如果我想读书的话,我就陷入了我的代表的僵局。

    我开始编写一个单独的线程,它将从数据库连接中获取事件并将其传递给注册的委托,但这似乎是一个草率的解决方案。我是否缺少一个简单的方法来处理这个问题?

    真正让我恼火的是,我并不总是碰到僵局。但是,当我点击它并查看调用堆栈时,它会一直到达我发布更新的地方。

    顺便说一下,我用的图书馆是 System.Data.SQLite .

    1 回复  |  直到 15 年前
        1
  •  1
  •   Gonzalo    15 年前

    在更新的事件中,调用threadpool.queueUserWorkItem(),并在当前更新的事件回调中向其传递带有逻辑的方法。