Ejemplo n.º 1
0
 private void RemoveVolumeCore(CacheKey cacheKey, CachedVolume cachedItem)
 {
     lock (_syncRoot)
     {
         // double check identity of item being removed, in case it's already been recreated before the previous item's dispose finishes
         CachedVolume realItem;
         if (_cache.TryGetValue(cacheKey, out realItem) && ReferenceEquals(realItem, cachedItem))
         {
             _cache.Remove(cacheKey);
         }
     }
 }
Ejemplo n.º 2
0
 public void Dispose()
 {
     if (_cachedVolume != null)
     {
         if (_locked)
         {
             _cachedVolume.Unlock();
         }
         _cachedVolume._progressChanged.RemoveHandler(CachedVolumeOnProgressChanged);
         _cachedVolume.DecrementReferenceCount();
         _cachedVolume = null;
     }
 }
Ejemplo n.º 3
0
        private ICachedVolumeReference CreateVolumeCore(IList <Frame> frames)
        {
            var cacheKey = new CacheKey(frames);

            lock (_syncRoot)
            {
                CachedVolume cachedItem;
                if (!_cache.TryGetValue(cacheKey, out cachedItem) || cachedItem.IsDisposed)
                {
                    _cache[cacheKey] = cachedItem = new CachedVolume(this, cacheKey, frames);
                }
                return(cachedItem.CreateReference());                // always return a new counted reference to the cache item
            }
        }
Ejemplo n.º 4
0
        private void RemoveVolumeCore(CacheKey cacheKey, CachedVolume cachedItem)
        {
            lock (_syncRoot)
            {
                // cached volume is an orphan because viewer was closed, so just ignore this command
                if (_cache == null)
                {
                    return;
                }

                // double check identity of item being removed, in case it's already been recreated before the previous item's dispose finishes
                CachedVolume realItem;
                if (_cache.TryGetValue(cacheKey, out realItem) && ReferenceEquals(realItem, cachedItem))
                {
                    _cache.Remove(cacheKey);
                }
            }
        }
Ejemplo n.º 5
0
 public CachedVolumeReference(CachedVolume cachedVolume)
 {
     cachedVolume.IncrementReferenceCount();
     _cachedVolume = cachedVolume;
     _cachedVolume._progressChanged.AddHandler(CachedVolumeOnProgressChanged);
 }
Ejemplo n.º 6
0
 public CachedVolumeReference(CachedVolume cachedVolume)
 {
     cachedVolume.IncrementReferenceCount();
     _cachedVolume = cachedVolume;
     _cachedVolume._progressChanged += CachedVolumeOnProgressChanged;
 }