protected virtual void Dispose(bool disposing)
        {
            if (_isDisposed)
            {
                return;
            }

            if (disposing)
            {
                if (IndisposableStates.HasFlag(PowerShell.InvocationStateInfo.State))
                {
                    PowerShell.BeginStop(
                        asyncResult =>
                    {
                        PowerShell.Runspace = null;
                        PowerShell.Dispose();
                    },
                        state: null);
                }
                else
                {
                    PowerShell.Runspace = null;
                    PowerShell.Dispose();
                }

                _frameExited.Release();
            }

            _isDisposed = true;
        }