internal static GoPenInfo GetPenInfo(System.Drawing.Pen p) { GoPenInfo info3; if (p == null) { return(null); } lock (DiagramGraph.myDrawers) { WeakHashRef ref1 = new WeakHashRef(p); WeakReference reference1 = (WeakReference)DiagramGraph.myDrawers[ref1]; GoPenInfo info1 = null; if (reference1 != null) { if (reference1.IsAlive) { info1 = reference1.Target as GoPenInfo; } else { DiagramGraph.myDrawers.Remove(ref1); } } if (info1 == null) { info1 = new GoPenInfo(); if (!info1.SetPen(p)) { return(info1); } WeakHashRef ref2 = new WeakHashRef(info1); reference1 = (WeakHashRef)DiagramGraph.myInfos[ref2]; if (reference1 != null) { if (reference1.IsAlive) { GoPenInfo info2 = reference1.Target as GoPenInfo; if (info2 != null) { return(info2); } } else { DiagramGraph.myInfos.Remove(ref2); } } DiagramGraph.myDrawers[ref1] = new WeakReference(info1); DiagramGraph.myInfos[ref2] = ref2; DiagramGraph.CleanInfos(); } info3 = info1; } return(info3); }
internal static void CleanInfos() { if (DiagramGraph.myCounter++ >= 100) { DiagramGraph.myCounter = 0; GC.Collect(); ArrayList list1 = new ArrayList(); IDictionaryEnumerator enumerator1 = DiagramGraph.myDrawers.GetEnumerator(); while (enumerator1.MoveNext()) { WeakHashRef ref1 = (WeakHashRef)enumerator1.Key; if (!ref1.IsAlive) { list1.Add(ref1); } } foreach (WeakHashRef ref2 in list1) { DiagramGraph.myDrawers.Remove(ref2); } list1.Clear(); enumerator1 = DiagramGraph.myInfos.GetEnumerator(); while (enumerator1.MoveNext()) { WeakHashRef ref3 = (WeakHashRef)enumerator1.Key; if (!ref3.IsAlive) { list1.Add(ref3); } } foreach (WeakHashRef ref4 in list1) { DiagramGraph.myInfos.Remove(ref4); } list1.Clear(); } }
internal static GoPenInfo GetPenInfo(System.Drawing.Pen p) { GoPenInfo info3; if (p == null) { return null; } lock (DiagramGraph.myDrawers) { WeakHashRef ref1 = new WeakHashRef(p); WeakReference reference1 = (WeakReference)DiagramGraph.myDrawers[ref1]; GoPenInfo info1 = null; if (reference1 != null) { if (reference1.IsAlive) { info1 = reference1.Target as GoPenInfo; } else { DiagramGraph.myDrawers.Remove(ref1); } } if (info1 == null) { info1 = new GoPenInfo(); if (!info1.SetPen(p)) { return info1; } WeakHashRef ref2 = new WeakHashRef(info1); reference1 = (WeakHashRef)DiagramGraph.myInfos[ref2]; if (reference1 != null) { if (reference1.IsAlive) { GoPenInfo info2 = reference1.Target as GoPenInfo; if (info2 != null) { return info2; } } else { DiagramGraph.myInfos.Remove(ref2); } } DiagramGraph.myDrawers[ref1] = new WeakReference(info1); DiagramGraph.myInfos[ref2] = ref2; DiagramGraph.CleanInfos(); } info3 = info1; } return info3; }