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