예제 #1
0
        private void Proxy_Finalized(object sender, EventArgs e)
        {
            if (!(sender is ProxyObjectBase proxy))
            {
                return;
            }

            lock (((IDictionary)_knownDtos).SyncRoot)
            {
                Logger.Trace("Deleting from knowndtos {0}", proxy.DtoGuid);
                _knownDtos.Remove(proxy.DtoGuid);
                ReferenceFinalized?.Invoke(this, new ProxyObjectBaseEventArgs(proxy));
            }
        }
예제 #2
0
 private void Proxy_Finalized(object sender, EventArgs e)
 {
     Debug.Assert(sender is ProxyBase);
     ((ProxyBase)sender).Finalized -= Proxy_Finalized;
     try
     {
         lock (((IDictionary)_knownDtos).SyncRoot)
             if (_knownDtos.TryGetValue(((ProxyBase)sender).DtoGuid, out var _))
             {
                 _knownDtos.Remove(((ProxyBase)sender).DtoGuid);
                 Logger.Trace("Reference resolver - object {0} disposed, generation is {1}", sender,
                              GC.GetGeneration(sender));
             }
         ReferenceFinalized?.Invoke(this, new ProxyBaseEventArgs((ProxyBase)sender));
     }
     catch
     {
         // ignored because invoked in garbage collector thread
     }
 }