Ограничения событий Application.Startup (ошибка?)

Это говорит, я могу использоватьStartup Событие для многих вещей, таких как инициализация, создание нескольких форм, блаблабла.

Однако попробуйте создать новое приложение WPF и добавить этот обработчик событий:

    private void App_Startup(object sender, StartupEventArgs e)
    {
        Window window = new Window();
    }

И после закрытия главного окна ваше приложение зависнет в памяти. Приостановка выполнения в VS в этот момент отвратителенавария окно стека вызовов с большим количеством вызовов где-то далеко от моего исходного кода.

Какие-нибудь мысли?

П.С .: Мне нужно один раз создать все свои окна для самостоятельной настройки. Должен ли я использовать какое-то другое место?

Позвольте мне привести лучший пример (приведенный выше пример хорошо воспроизводит проблему, кажется, мне трудно понять, что я на самом деле делаю). Я удаляюStartupUri а потом:

    private void App_Startup(object sender, StartupEventArgs e)
    {
        // un-comment this line to reproduce the problem:
        // Window window = new Window();

        // actual implementation will be
        // Window1 window1 = new Window1();
        // Window2 window2 = new Window2();
        // Window3 window3 = new Window3();
        // Window4 window4 = new Window4();
        // ...

        // start main window as usually
        MainWindow mainWindow = new MainWindow();
        mainWindow.Show();
    }

И зачем мне экземпляры окон (window1, ..2, ..3, ...)? Потому что их содержимое будет проверено для создания списка элементов управления, для которых я хочу сохранить конфигурацию. Некоторые из этих оконникогда быть показано пользователю (например, если он не является администратором), некоторые из них являются всплывающими окнами, некоторые редакторы и т. д. Поэтому я не хочу их отображать. Но при любом запуске приложения конфигурация должна быть создана и сохранена. И я сейчас ищу место для этого.

Удивительно, но с помощью специального мероприятияStartup кажется, есть некоторыепроблемы с созданием нескольких окон, ноне отображается их. Вопрос в том, почему и как это решить.

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

    private void App_Startup(object sender, StartupEventArgs e)
    {
        Window window = new Window();
        window.Close(); // closing without opening window

        MainWindow mainWindow = new MainWindow();
        mainWindow.Show();
        //mainWindow = new MainWindow(); // can be un-commented, for absolutely no effect
        mainWindow.Show();
        mainWindow.Show();
        mainWindow.Show();
        mainWindow.Show(); // you will not see mainWindow at all, all Show doing nothing
    }

Больше вопросов. Что я делаю?

Что то работает, но пахнет

    private void App_Startup(object sender, StartupEventArgs e)
    {
        Window window = new Window();

        MainWindow mainWindow = new MainWindow();
        mainWindow.ShowDialog();
        Shutdown();
    }

Обратите внимание, позвонивShowDialog (что сделает обработчик событий ожидающим закрытия этого окна) и вызовShutdown сразу после.

До сих пор не ясно, в чем проблема вStartup обработчик событий для создания экземпляров некоторых окон. Есть идеи?

Ответы на вопрос(2)

Ваш ответ на вопрос