public override void Close() { try { _Closed = true; Cleanup(); if (!_ReadOnly) { _FileLastAccessManager.Add(_FilePath); } } catch (Exception e) { try { if (CachedFileBufferManager.ErrorMessage != null) { CachedFileBufferManager.ErrorMessage(string.Format("Closing CachedFileStream fail. FilePath:{0}", _FilePath), e); } } catch { } } base.Close(); }
private void CacheProc() { try { while (true) { int[] indexes = null; lock (_CacheLock) { if (_CacheIndexes.Count == 0) { _CacheThread = null; break; } else { indexes = _CacheIndexes.ToArray(); _CacheIndexes.Clear(); } } foreach (int index in indexes) { lock (_CacheLock) { if (_Closing) { break; } } if (!InnerCacheUnit(index)) { break; } } } } catch (Exception e) { try { if (CachedFileBufferManager.ErrorMessage != null) { CachedFileBufferManager.ErrorMessage(string.Format("Cache file fail. FilePath:{0}", _FilePath), e); } } catch { } } finally { lock (_CacheLock) { _CacheThread = null; } } CacheAllFinished = true; }