Приложение WPF без автоматической загрузки окна

Я настроил приложение WPF, чтобы оно не загружало окно автоматически, изменив app.xaml.cs, как показано ниже, и установив действие сборки на Page. Я также удалил starturl из app.xaml. Я представил класс контроллера, с которого запускается приложение, как вы можете видеть в приведенном ниже коде и в конструкторе для контроллера, который я создал и открыл новое окно. Я удалил исходное окно MainWindow, которое создавалось автоматически при открытии приложения.

В любом случае проблема в том, что после открытия нового окна, которое я добавил в контроллер, я закрываю окно, и приложение завершается? Почему? Я не хочу, чтобы приложение закрывалось, и я не понимаю, почему оно завершается при закрытии окна. Или, другими словами, как я могу ввести окно, которое не приводит к завершению работы приложения при закрытии окна? Любая помощь очень ценится.

using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Threading.Tasks;
using System.Windows;

namespace UserTraining
{
    /// <summary>
    /// Interaction logic for App.xaml
    /// </summary>
    public partial class App : Application
    {
        App()
        {
            InitializeComponent();
        }

        [STAThread]
        static void Main()
        {            
            App app = new App();
            UserTrainingController control = new UserTrainingController();
            app.Run();
        }

    }
}

UserTrainingController класс:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;

namespace UserTraining
{
    class UserTrainingController
    {
        public UserTrainingController()
        {
            IntroductionWindow w = new IntroductionWindow();
            w.Show();
        }
    }
}
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
310
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

После вызова UserTrainingController на экране появится окно с w.Show();. Когда вы закрываете окно, w.Show(); завершает работу и возвращается к вызывающему, что является методом Main. Это последний метод в стеке.

Но затем вы запускаете другой метод, app.Run(), но он немедленно завершается, возвращаясь к методу Main, которому после того, как app.Run() больше нечего делать, поэтому он также завершается.

Поскольку это был последний метод в стеке, стек пуст, что означает, что ваше приложение завершено.

У вас должно быть какое-то родительское окно, из которого вы можете открыть свое собственное окно.

Как правило, вам нужно предотвратить опустошение стека :)

Спасибо. Я использовал описанный выше метод явного выключения для решения проблемы, а не для создания родительского окна.

Rachel 674 03.10.2018 11:17
Ответ принят как подходящий

Приложение WPF имеет свойство ShutdownMode, значение которого является одним из членов Перечисление ShutdownMode. Имеет три возможных значения: OnExplicitShutdown, OnLastWindowClose и OnMainWindowClose.

По умолчанию установлено значение OnLastWindowClose, что означает, что приложение завершит работу при закрытии последнего окна или при вызове Application.Shutdown(). Я подозреваю, что именно поэтому ваше приложение завершается, когда ваше IntroductionWindow закрывается.

Вместо этого вам нужно установить ShutdownMode на OnExplicitShutdown. Таким образом, ваше приложение завершится только тогда, когда вы явно вызовете Application.Shutdown().

Вы можете установить свойство ShutdownMode либо в коде, либо в файле App.xaml.

ShutdownMode = "OnExplicitShutdown" Большое спасибо, проблема решена

Rachel 674 03.10.2018 11:16

@ Rachel674 Думаю, вы по ошибке приняли другой ответ

Steven Rands 03.10.2018 11:28

Извините, я подумал, что могу принять оба ответа как причины. Я снова изменил его, чтобы принять ваш ответ, так как это было то, что я использовал для решения проблемы. Спасибо.

Rachel 674 03.10.2018 11:29

Другие вопросы по теме