Я настроил приложение 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();
}
}
}





После вызова UserTrainingController на экране появится окно с w.Show();. Когда вы закрываете окно, w.Show(); завершает работу и возвращается к вызывающему, что является методом Main. Это последний метод в стеке.
Но затем вы запускаете другой метод, app.Run(), но он немедленно завершается, возвращаясь к методу Main, которому после того, как app.Run() больше нечего делать, поэтому он также завершается.
Поскольку это был последний метод в стеке, стек пуст, что означает, что ваше приложение завершено.
У вас должно быть какое-то родительское окно, из которого вы можете открыть свое собственное окно.
Как правило, вам нужно предотвратить опустошение стека :)
Приложение WPF имеет свойство ShutdownMode, значение которого является одним из членов Перечисление ShutdownMode. Имеет три возможных значения: OnExplicitShutdown, OnLastWindowClose и OnMainWindowClose.
По умолчанию установлено значение OnLastWindowClose, что означает, что приложение завершит работу при закрытии последнего окна или при вызове Application.Shutdown(). Я подозреваю, что именно поэтому ваше приложение завершается, когда ваше IntroductionWindow закрывается.
Вместо этого вам нужно установить ShutdownMode на OnExplicitShutdown. Таким образом, ваше приложение завершится только тогда, когда вы явно вызовете Application.Shutdown().
Вы можете установить свойство ShutdownMode либо в коде, либо в файле App.xaml.
ShutdownMode = "OnExplicitShutdown" Большое спасибо, проблема решена
@ Rachel674 Думаю, вы по ошибке приняли другой ответ
Извините, я подумал, что могу принять оба ответа как причины. Я снова изменил его, чтобы принять ваш ответ, так как это было то, что я использовал для решения проблемы. Спасибо.
Спасибо. Я использовал описанный выше метод явного выключения для решения проблемы, а не для создания родительского окна.