Beispiel #1
0
 void P_EH_PublisherOrSubscriber_BeforeDispose(object sender, DisposeEventArgs e)
 {
     if (TryReadDA(ref _publisher, out var publisher) &&
         TryReadDA(ref _subscriber, out var subscriber) &&
         (ReferenceEquals(sender, publisher) || ReferenceEquals(sender, subscriber)))
     {
         //
         DeactivateAsync().WaitWithTimeout();
     }
 }
Beispiel #2
0
        void P_EH_description_AfterDispose(object sender, DisposeEventArgs e)
        {
            var metadata =
                sender
                .EnsureNotNull(nameof(sender))
                .EnsureOfType <IMetadata>()
                .Value;

            //
            if (TryReadDA(ref _exportersSpinLock, out var spinLock) && TryReadDA(ref _exporters, out var exporters))
            {
                spinLock.Invoke(() => exporters.GetOrDefault(metadata))?.Dispose();
                spinLock.Invoke(() => exporters.Remove(metadata));
            }
        }
            /// <summary>
            /// <para>Do all the dispose </para>
            /// <para>销毁,尝试运行所有注册的销毁操作</para>
            /// </summary>
            /// <param name="disposing"><c>true</c> to release both managed and unmanaged resources; <c>false</c> to release only unmanaged resources.</param>
            protected virtual void Dispose(bool disposing)
            {
                var disposeList = Interlocked.Exchange(ref _disposeInfoList, new Lazy <List <DisposeEntry> >(() => new List <DisposeEntry>(), true));

                if (disposeList != null && disposeList.IsValueCreated)
                {
                    var l = disposeList.Value
                            .Select
                            (
                        info =>
                    {
                        var ea = DisposeEventArgs.Create(info);
                        //Exception gotex = null;
                        try
                        {
                            if (DisposeEntryDisposing != null)
                            {
                                DisposeEntryDisposing(this, ea);
                            }
                            if (disposing || info.IsNeedCheckOnFinalizer)
                            {
                                info.Action();
                            }
                        }
                        catch (Exception ex)
                        {
                            info.Exception = ex;
                        }
                        finally
                        {
                            if (DisposeEntryDisposed != null)
                            {
                                DisposeEntryDisposed(this, ea);
                            }
                        }

                        return(info);
                    }

                            )
                            .Where(x => x.Exception != null)
                            .ToArray();
                    if (l.Length > 0)
                    {
                        OnDisposeExceptions(l);
                    }
                }
            }
Beispiel #4
0
 /// <summary>
 /// Raises the ondispose event.
 /// </summary>
 /// <param name="args">The <see cref="Rendition.DisposeEventArgs"/> instance containing the event data.</param>
 internal void raiseOnDispose( DisposeEventArgs args )
 {
     if( Disposing != null ) { Disposing( this, args ); };
 }
 /// <summary>
 /// An item of this GUI has been disposed of, deal with it.
 /// </summary>
 /// <param name="obj">The object that fired this event.</param>
 /// <param name="e">The event's arguments.</param>
 private void OnItemDispose(object obj, DisposeEventArgs e)
 {
     //Remove the item from the list.
     RemoveItem(e.Item);
 }