Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
 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();
     }
 }
Ejemplo n.º 3
0
 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;
 }