예제 #1
0
        internal async Task Pop(CancellationToken cancellationToken)
        {
            Debug.Assert(_state == AppStateState.Pushed);

            try
            {
                if (_substateManager != null)
                {
                    await _substateManager.PopAll();
                }

                _state = AppStateState.Popped;
                _console.TraceData(TraceEventType.Verbose, 0, "- PopState " + _fullName);
                _controllerEvents?.OnPop();
                _parentStateManager.InvokeStatePopped(_eventArgs);
            }
            catch (Exception e)
            {
                _console.TraceData(TraceEventType.Error, 0, e);
            }
            finally
            {
                Dispose();
            }
        }
예제 #2
0
        internal async Task Push(CancellationToken cancellationToken)
        {
            Debug.Assert(_state == AppStateState.Created);

            _state = AppStateState.Pushed;
            _console.TraceData(TraceEventType.Verbose, 0, "- PushState " + _fullName);
            _stack.Add(this);
            _controllerEvents?.OnPush();
            _parentStateManager.InvokeStatePushed(_eventArgs);

            if (_controller is IAppStateContent sc)
            {
                await sc.LoadContent(cancellationToken);
            }
        }
예제 #3
0
        public void Dispose()
        {
            if (_state != AppStateState.Disposed)
            {
                _state = AppStateState.Disposed;
                _stack.Remove(this);

                try
                {
                    if (_controller is IDisposable d)
                    {
                        d.Dispose();
                    }
                }
                finally
                {
                    _view?.Dispose();
                }
            }
        }