public void Save() { if (!_isWriting) { throw new InvalidOperationException("Database not opened for writing"); } ManualResetEvent databaseAccess; lock (_databasesAccessible) { string databaseHash = CryptoServiceHandler.GenerateHash(_databaseFile.Name.Trim().ToLower()); if (_databasesAccessible.TryGetValue(databaseHash, out databaseAccess)) { while (!databaseAccess.Reset()) { databaseAccess.WaitOne(); } } else { databaseAccess = new ManualResetEvent(false); _databasesAccessible.Add(databaseHash, databaseAccess); } } try { _saveEntryNumber = 0; _databaseFile.Save(); } finally { databaseAccess.Set(); } }
private static void WaitForAccess(string databaseFilePath) { ManualResetEvent databaseAccess; string databaseHash = CryptoServiceHandler.GenerateHash(databaseFilePath.Trim().ToLower()); if (_databasesAccessible.TryGetValue(databaseHash, out databaseAccess)) { databaseAccess.WaitOne(); } }