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(); } }
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); } }
public void Dispose() { if (_state != AppStateState.Disposed) { _state = AppStateState.Disposed; _stack.Remove(this); try { if (_controller is IDisposable d) { d.Dispose(); } } finally { _view?.Dispose(); } } }