internal ApplicationStateManager(IClassicDesktopStyleApplicationLifetime lifetime, bool startInBg) { _lifetime = lifetime; _stateMachine = new StateMachine <State, Trigger>(State.InitialState); ApplicationViewModel = new ApplicationViewModel(this); Observable .FromEventPattern(Services.SingleInstanceChecker, nameof(SingleInstanceChecker.OtherInstanceStarted)) .ObserveOn(RxApp.MainThreadScheduler) .Subscribe(_ => _stateMachine.Fire(Trigger.Show)); _stateMachine.Configure(State.InitialState) .InitialTransition(State.Open) .OnTrigger(Trigger.ShutdownRequested, () => lifetime.Shutdown()) .OnTrigger(Trigger.ShutdownPrevented, () => ApplicationViewModel.OnShutdownPrevented()); _stateMachine.Configure(State.Closed) .SubstateOf(State.InitialState) .OnEntry(() => { _lifetime.MainWindow.Close(); _lifetime.MainWindow = null; ApplicationViewModel.IsMainWindowShown = false; }) .Permit(Trigger.Show, State.Open) .Permit(Trigger.ShutdownPrevented, State.Open) .Permit(Trigger.Loaded, State.Open); _stateMachine.Configure(State.Open) .SubstateOf(State.InitialState) .OnEntry(CreateAndShowMainWindow) .Permit(Trigger.Hide, State.Closed) .Permit(Trigger.MainWindowClosed, State.Closed) .OnTrigger(Trigger.Show, MainViewModel.Instance.ApplyUiConfigWindowSate); _lifetime.ShutdownRequested += LifetimeOnShutdownRequested; _stateMachine.Start(); if (!startInBg) { _stateMachine.Fire(Trigger.Loaded); } }
protected override void ExitApplication() { _isShuttingDown = true; _appLifetime.Shutdown(); }
private Task Exit() { desktop.Shutdown(); return(Task.CompletedTask); }