public static CleanupNotifier.RegistrationToken RegisterForCleanup(IntPtr cleanupObjectCPtr, IntPtr notifyObjectCPtr, object notifyObject, Type notifyObjectType, CleanupNotifier.DisposeObjectDelegate disposeObjectDelegate, CleanupNotifier.DeleteObjectDelegate deleteObjectDelegate) { object obj = CleanupNotifier.cleanupIdToContext; CleanupNotifier.RegistrationToken result; lock (obj) { result = CleanupNotifier.RegistrationToken.Create(CleanupNotifier.cleanupIdToContext); CleanupNotifier.cleanupIdToContext[result.Identifier] = new CleanupNotifier.ObjectCleanupContext { NotifyObjectType = notifyObjectType, NotifyObject = notifyObject, DisposeObject = disposeObjectDelegate, DeleteObject = deleteObjectDelegate, CleanupObjectCPtr = cleanupObjectCPtr, NotifyObjectCPtr = notifyObjectCPtr }; if (CleanupNotifier.f__mgcache0 == null) { CleanupNotifier.f__mgcache0 = new CleanupNotifierBridge.CleanupDelegate(CleanupNotifier.PerformCleanup); } if (!CleanupNotifierBridge.RegisterCleanupDelegate(cleanupObjectCPtr, notifyObjectCPtr, CleanupNotifier.f__mgcache0, (IntPtr)result.Identifier)) { CleanupNotifier.cleanupIdToContext.Remove(result.Identifier); throw new NullReferenceException(string.Format("{0} (instance 0x{1:X}) can't be registered for cleanup with 0x{2:X}.", notifyObjectType, notifyObjectCPtr, cleanupObjectCPtr)); } FirebaseApp.LogMessage(LogLevel.Debug, string.Format("{0} (instance 0x{1:X}) registered for cleanup when 0x{2:X} is destroyed", notifyObjectType, (long)notifyObjectCPtr, (long)cleanupObjectCPtr)); } return(result); }
public static bool RegisterCleanupDelegate(IntPtr cleanupObject, IntPtr notifyObject, CleanupNotifierBridge.CleanupDelegate cleanupDelegate, IntPtr context) { bool result = AppUtilPINVOKE.CleanupNotifierBridge_RegisterCleanupDelegate(cleanupObject, notifyObject, cleanupDelegate, context); if (AppUtilPINVOKE.SWIGPendingException.Pending) { throw AppUtilPINVOKE.SWIGPendingException.Retrieve(); } return(result); }
public static extern bool CleanupNotifierBridge_RegisterCleanupDelegate(IntPtr jarg1, IntPtr jarg2, CleanupNotifierBridge.CleanupDelegate jarg3, IntPtr jarg4);