private void DoDispose() { if (WatcherThread != null) { WatcherThread.Abort(); } //InternalDict.Values.ToList().ForEach(Value => Value.Dispose()); foreach (T Value in InternalDict.Values) { Value.Dispose(); } InternalDict.Clear(); m_InternalDict = null; m_ValueFactory = null; GC.SuppressFinalize(this); }
public void DisposeThreadCompletedValues() { lock (SyncRoot) { List <Thread> CompletedThreads; CompletedThreads = new List <Thread>(); foreach (Thread ThreadInstance in InternalDict.Keys) { if (!ThreadInstance.IsAlive) { CompletedThreads.Add(ThreadInstance); } } foreach (Thread ThreadInstance in CompletedThreads) { InternalDict[ThreadInstance].Dispose(); InternalDict.Remove(ThreadInstance); } } }
public override string this[string key] { get { if (InternalDict.ContainsKey(key)) { return(InternalDict[key]); } if (Osr is OpenSlide osr) { var value = osr.GetPropertyValue(key); InternalDict[key] = value ?? throw new OpenSlideException($"Property {key} was not found."); } else { return(null); } return(InternalDict[key]); } set => InternalDict[key] = value;