示例#1
0
        private void ClearFinalizer()
        {
            if (weakRef == null)
            {
                return;
            }

            WeakRefTracker wrt = weakRef;

            if (wrt != null)
            {
                // find our handler and remove it (other users could have created weak refs to us)
                for (int i = 0; i < wrt.HandlerCount; i++)
                {
                    if (wrt.GetHandlerCallback(i) is OldInstanceFinalizer)
                    {
                        wrt.RemoveHandlerAt(i);
                        break;
                    }
                }

                // we removed the last handler
                if (wrt.HandlerCount == 0)
                {
                    GC.SuppressFinalize(wrt);
                    weakRef = null;
                }
            }
        }
示例#2
0
 private bool HasFinalizer()
 {
     if (weakRef != null)
     {
         WeakRefTracker wrt = weakRef;
         if (wrt != null)
         {
             for (int i = 0; i < wrt.HandlerCount; i++)
             {
                 if (wrt.GetHandlerCallback(i) is OldInstanceFinalizer)
                 {
                     return(true);
                 }
             }
         }
     }
     return(false);
 }