コード例 #1
0
    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);
        }
    }
コード例 #2
0
 protected override void ExitApplication()
 {
     _isShuttingDown = true;
     _appLifetime.Shutdown();
 }
コード例 #3
0
 private Task Exit()
 {
     desktop.Shutdown();
     return(Task.CompletedTask);
 }