예제 #1
0
 // Closes the process, releases all resources & emits Disposed event.
 public void Dispose()
 {
     if (IsDisposed == true)
     {
         return;
     }
     IsDisposed   = true;
     Proc.Exited -= OnExit;
     if (Info.RedirectStandardOutput)
     {
         Proc.OutputDataReceived -= OnStdout;
     }
     if (Info.RedirectStandardError)
     {
         Proc.ErrorDataReceived -= OnStderr;
     }
     try {
         Proc.Close();
         Proc.Dispose();
     } catch {}
     foreach (NamedPipe pipe in Pipes)
     {
         pipe?.Dispose();
     }
     StdioTasks.Clear();
     StdioTaskSources.Clear();
     if (Disposed != null)
     {
         Disposed.Invoke();
         foreach (var listener in Disposed.GetInvocationList())
         {
             Disposed -= (Action)listener;
         }
     }
 }
예제 #2
0
        private void Dispose(bool disposeManagedResources)
        {
            // process only if mananged and unmanaged resources have
            // not been disposed of.
            lock (this)
            {
                if (!this.disposed)
                {
                    DisposeUnmanagedResources();
                }
            }

            DisposeFrames();
            //somehow we need to call this always, regardless of state 'this.disposed', otherwise we leak resources.

            if (Disposed != null)
            {
                Disposed(this, new EventArgs());
                if (Disposed != null)
                {
                    foreach (EventHandler eventDelegate in Disposed.GetInvocationList())
                    {
                        Disposed -= eventDelegate;
                    }
                }
            }
            this.disposed = true;
        }
        private void DisposeInternal()
        {
            if (_disposed)
            {
                return;
            }

            DisposeTextureFrames();

            _disposed = true;

            if (Disposed != null)
            {
                Disposed(this, new EventArgs());

                if (Disposed != null)
                {
                    foreach (EventHandler eventDelegate in Disposed.GetInvocationList())
                    {
                        Disposed -= eventDelegate;
                    }
                }
            }
        }
예제 #4
0
 private void Dispose(bool disposeManagedResources)
 {
     // process only if mananged and unmanaged resources have
     // not been disposed of.
     if (!this.disposed)
     {
         lock (this)
         {
             DisposeUnmanagedResources();
         }
         if (Disposed != null)
         {
             Disposed(this, new EventArgs());
             if (Disposed != null)
             {
                 foreach (EventHandler eventDelegate in Disposed.GetInvocationList())
                 {
                     Disposed -= eventDelegate;
                 }
             }
         }
         disposed = true;
     }
 }