Перемещение уведомления о событии в другой поток - PullRequest
1 голос
/ 12 ноября 2009

Я работаю со сторонней библиотекой, которая предоставляет доступ к базе данных. В объекте соединения с базой данных есть событие с именем Updated, которое срабатывает при каждом изменении базы данных.

Я сталкиваюсь с проблемой, когда мой делегат хочет прочитать из базы данных. Похоже, что соединение имеет ReaderWriterLock защиты базы данных. Во время вызова ExecuteNonQuery блокировка записывающего устройства берется, но не снимается до срабатывания события. Итак, я зашел в тупик в моем делегате, если я хочу читать.

Я начал писать отдельный поток, который брал бы событие из соединения с базой данных и передавал его зарегистрированным делегатам, но это было похоже на небрежное решение. Я упускаю простой способ справиться с этой проблемой?

Что меня действительно беспокоит, так это то, что я не всегда захожу в тупик. Однако когда я нажимаю на него и смотрю на стек вызовов, он полностью возвращается к точке, в которой я выпустил обновление.

Кстати, я использую библиотеку System.Data.SQLite .

1 Ответ

1 голос
/ 12 ноября 2009

В обновленном событии вызовите ThreadPool.QueueUserWorkItem () и передайте ему метод с логикой в ​​текущем обратном вызове обновленного события.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...