Я не могу избавиться от ошибки «база данных заблокирована» ... даже когда я использовал мьютекс для управления доступом к базе данных.
Это обработчик событий, который генерируется асинхронно:
void driver_Transaccion(object sender, AttendanceReader.MarcacionEventArgs e)
{
if (_transaccion != null)
{
try
{
using (GlobalMutex.GetMutex())
{
using (var db = new DataWare.monitorEntities())
{
/* some instructions */
/* ..... */
db.SaveChanges(); /* A database lock occurs here */
}
}
}
catch (Exception ex)
{
ErrorLog.Save(ex);
}
}
}
GlobalMutex.GetMutex () определяется следующим образом:
public class GlobalMutex : IDisposable
{
private Mutex _mutex;
private bool _acquired;
public GlobalMutex()
{
_mutex = new Mutex(false, "RELOJ_ELO_20181004");
_acquired = _mutex.WaitOne();
}
public static IDisposable GetMutex()
{
return new GlobalMutex();
}
public void Dispose()
{
if (_acquired)
_mutex.ReleaseMutex();
_mutex.Dispose();
_mutex = null;
}
}
С другой стороны, существует другое приложение, которое также выполняет запись в базу данных.
Это внешнее приложение захватывает мьютексТочно так же.
Возможно, db.SaveChanges не закрывает файл базы данных, пока другой процесс не попытается записать его.База данных SQLite медленно делает это?Есть ли эффективный способ решить эту проблему?
С уважением, Хайме