示例#1
0
        internal DomainObject(IntPtr handle, AddRef addRef, DelRef delRef, bool preIncremented)
        {
            ThrowHelper.ThrowIfNull(addRef, "addRef");
            ThrowHelper.ThrowIfNull(delRef, "delRef");
            ThrowHelper.ThrowIfZero(handle, "handle");

            _addRef = addRef;
            _delRef = delRef;

            if (!preIncremented)
            {
                ThrowHelper.ThrowIfError(_addRef(handle));
            }

            Handle = handle;

            lock (_objectsToDispose)
            {
                _objectsToDispose.Add(this);
            }
        }
示例#2
0
        protected virtual void Dispose(bool disposing)
        {
            if (_disposed)
            {
                return;
            }

            DelRef release = _delRef;

            if (disposing)
            {
                _delRef = null;
                _addRef = null;
            }


            if (release != null && Handle != IntPtr.Zero)
            {
                release(Handle);
            }

            Handle    = IntPtr.Zero;
            _disposed = true;
        }
示例#3
0
 internal AbstractAsyncLoadable(IntPtr handle, AddRef addRef, DelRef delRef, bool preIncremented)
     : base(handle, addRef, delRef, preIncremented)
 {
 }