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)); } }
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 } }