Ограничения событий 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
обработчик событий для создания экземпляров некоторых окон. Есть идеи?